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