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

时间:2010-03-16 10:28:13

标签: 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_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)

9 个答案:

答案 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开始解除。