Android AppWidget TextView:如何在运行时设置背景颜色

我正在尝试创build一个AppWidget,其中TextView的背景颜色以指定的周期性间隔随机更改。

TextView在layout xml文件中定义为

<?xml version="1.0" encoding="utf-8" ?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/widget" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/message" android:background="#ff99ff" android:text="Hello Widget" /> </LinearLayout> 

在更新方法中,我已经加载了布局

 RemoteViews remoteView=new RemoteViews(context.getPackageName(),R.layout.widget_message); 

要改变TextView的背景,我使用了下面的语句

 remoteView.setInt(R.id.message, "setBackgroundResource", R.color.col_1); 

但是我正在获取一个小部件,指出加载小部件的问 如果我删除上面的行一切工作正常。

LogCat说:

updateAppWidget使用错误视图找不到任何视图

android.widget.RemoteViews $ ActionException:view:android.widget.TextView不能与RemoteViews一起使用方法:setBackgroundResource(int)

Solutions Collecting From Web of "Android AppWidget TextView:如何在运行时设置背景颜色"

试试这个,它会正常工作。

 remoteView.setInt(R.id.message, "setBackgroundColor", android.graphics.Color.BLACK); 

如果要设置文本本身的颜色,请使用

 remoteViews.setInt(R.id.tvAmountThisYear, "setTextColor", android.graphics.Color.RED); 

如果你有一些形状作为textview的背景,在一些可绘制的资源中定义的背景,那么你可以使用

 remoteViews.setInt(R.id.change,"setBackgroundResource", R.drawable.my_drawable_new); 

在上面的代码语句中,R.id.change是带有一些背景资源的TextView,并且在可绘制文件夹中定义了一些资源(my_drawable和drawable_new)。

 <TextView android:id="@+id/change" android:background="@drawable/my_drawable"> </TextView 

托马斯是正确的。 我的解决方法是用各自的背景制作两个视图,使其中一个可见,另一个可见。 当然这只适用于less量的背景,例如可能指示某种状态的“绿色”和“红色”。

从android 2.2开始,这个方法可以被调用,而不是之前。

contentView.setInt(R.id.tv_contactText,“setBackgroundColor”,Color.parseColor(hexColor));

原因是通过RemoteViews,你可以调用有限的方法。 如果这是禁止你得到这样的消息。

汤姆

我觉得奇怪的是,它在我的联系一(2.2),但在HTC Tattoo(1.6)根本没有。 我将尝试运行一些模拟器testing,看看是不是HTC的另一个案例懒洋洋地实现了一些底层的UI渲染代码,我已经发现与纹身(布局呈现不同于股票Android 1.6)。

你testing了什么设备?

当你运行一个2.2仿真器的时候,仿真器会让它通过,所以我猜这个限制是从2.2版本中解除的。