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

Android AppWidget TextView:如何在运行时设置背景色,android,Android,我正在尝试创建一个AppWidget,其中TextView的背景色以指定的周期间隔随机更改 TextView在布局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_p

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

TextView在布局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>
为了更改TextView的背景,我使用了以下语句

remoteView.setInt(R.id.message, "setBackgroundResource", R.color.col_1);
但我得到一个小部件,说加载小部件有问题。如果我删除上面的一行,一切正常

LogCat说:

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

android.widget.RemoteViews$ActionException: 视图:android.widget.TextView无法 将方法与RemoteView一起使用: 挫折资源(int)


原因是,通过RemoteView,您只能调用数量有限的方法。如果被禁止,你会收到这样的信息


汤姆是对的。我的解决方案是使两个视图具有各自的背景,并使一个不可见,另一个可见。当然,这只适用于少数背景,例如,可能表示某种状态的“绿色”和“红色”。

我觉得奇怪的是,它在我的nexus one(2.2)上效果很好,但在HTC纹身(1.6)上一点也不好。我将尝试运行一些模拟器测试,看看这是否只是HTC懒散地实现一些底层UI呈现代码的另一个例子,我已经在纹身中找到了这些代码(布局呈现方式与Android 1.6上的不同)


你是在什么设备上测试这个的?

当你运行2.2模拟器时,模拟器会让它通过,所以我猜限制从2.2开始解除。

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

试试这个,它会很好用的

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

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

remoteViews.setInt(R.id.tvAmountThisYear, "setTextColor",
                android.graphics.Color.RED);
contentView.setInt(R.id.tv_contactText,“setBackgroundColor”,
parseColor(hexColor))

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

remoteViews.setInt(R.id.change,"setBackgroundResource", R.drawable.my_drawable_new);
在上面的代码语句中,R.id.change是具有一些后台资源的文本视图,并且您已经在可绘制文件夹中定义了一些资源(my_drawable和my drawable_new)

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


在我的2.1模拟器上不工作。也许安卓2.2中取消了限制??另请参见android开发者组:听起来这是一个众所周知的限制现在我做的是:views.setImageViewBitmap(R.id.background,BitmapFactory.decodeResource(context.getResources(),info.backgroundImageId));它更烦人,效率更低,但现在我可以直接添加可下载的主题。您只能使用带有@RemotableViewMethod注释的方法如果我想保留可绘制的,该怎么办?不适用于像LinearLayout这样的视图组,适用于像TextView这样的视图
<TextView
    android:id="@+id/change"
    android:background="@drawable/my_drawable">
</TextView