我正在尝试创建一个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>
在更新方法中,我已将布局加载为
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: 查看:android.widget.TextView不能 使用RemoteViews的方法: setBackgroundResource(INT)
答案 0 :(得分:61)
试试这个它会正常工作。
remoteView.setInt(R.id.message, "setBackgroundColor",
android.graphics.Color.BLACK);
答案 1 :(得分:7)
如果要设置文本本身的颜色,请使用
remoteViews.setInt(R.id.tvAmountThisYear, "setTextColor",
android.graphics.Color.RED);
答案 2 :(得分:7)
如果你有一些形状作为textview的背景,在某些可绘制资源中定义背景,那么你可以使用
remoteViews.setInt(R.id.change,"setBackgroundResource", R.drawable.my_drawable_new);
在上面的代码语句中,R.id.change是带有一些后台资源的TextView,你已经在drawable文件夹中定义了一些资源(my_drawable和我的drawable_new)。
<TextView
android:id="@+id/change"
android:background="@drawable/my_drawable">
</TextView
答案 3 :(得分:5)
contentView.setInt(R.id.tv_contactText,&#34; setBackgroundColor&#34;, Color.parseColor(hexColor));
答案 4 :(得分:1)
托马斯是对的。我的解决方案是使用相应的背景制作两个视图,并使一个INVISIBLE,另一个可见。当然,这仅适用于少量背景,例如,“绿色”和“红色”可能表示某种状态。
答案 5 :(得分:1)
从Android 2.2开始,这个方法可以调用,而不是之前。
答案 6 :(得分:0)
原因是通过RemoteViews你可以调用有限数量的方法。如果被禁止,你会收到这样的消息。
汤姆
答案 7 :(得分:0)
我觉得奇怪的是它在我的nexus one(2.2)上运行得很好,但在HTC Tattoo(1.6)上却没有。我将尝试运行一些模拟器测试,看看它是不是只是另一个HTC懒惰实现一些底层UI渲染代码的情况,我已经在Tattoo中找到了(Layouts渲染方式与在Android 1.6上有所不同)。
您在测试此设备的是什么设备?
答案 8 :(得分:0)
当你运行2.2模拟器时,模拟器将允许这样做,所以我猜这个限制从2.2开始解除。