I am trying to create an AppWidget, in which the background color of a TextView changes at random at specified periodic interval.
The TextView is defined in layout xml file as
<?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>
In update method, i have loaded the layout as
RemoteViews remoteView=new RemoteViews(context.getPackageName(),R.layout.widget_message);
To change the background of TextView i used the following statement
remoteView.setInt(R.id.message, "setBackgroundResource", R.color.col_1);
But i am getting a widget saying problem loading widget. If i remove the above line everything works fine.
LogCat says:
updateAppWidget couldn't find any view, using error view
android.widget.RemoteViews$ActionException: view: android.widget.TextView can't use method with RemoteViews: setBackgroundResource(int)
Try this it will work fine.
remoteView.setInt(R.id.message, "setBackgroundColor",
android.graphics.Color.BLACK);
If you want to set the color of the text itself, use
remoteViews.setInt(R.id.tvAmountThisYear, "setTextColor",
android.graphics.Color.RED);
If you have some shape as the background of the textview, where the background is defined in some drawable resource, then you can use
remoteViews.setInt(R.id.change,"setBackgroundResource", R.drawable.my_drawable_new);
In above code statement, R.id.change is the TextView with some background resource and you have defined some resources (my_drawable and my drawable_new) in your drawable folder.
<TextView
android:id="@+id/change"
android:background="@drawable/my_drawable">
</TextView
contentView.setInt(R.id.tv_contactText,“setBackgroundColor”,Color.parseColor(hexColor));
Tomas is correct. My solution is to make two views with the respective backgrounds and make one INVISIBLE and the other one VISIBLE. Of course this only works with a small number of backgrounds, eg, "green" and "red" that might indicate some state.
从Android 2.2开始,可以调用此方法,而不是之前。
The reason is that via RemoteViews you can call just limited amount of methods. In case that it is prohibited you get message like this.
Tom
What i find weird about this is that it works great on my nexus one ( 2.2 ), but not at all on an HTC Tattoo ( 1.6 ). I'm going to try and run some emulator tests and see if it's not just another case of HTC lazily implementing some underlying UI rendering code, which i already found with the Tattoo ( Layouts render differently than on stock Android 1.6 ).
What device were you testing this on?
当你运行2.2模拟器时,模拟器会让它通过,所以我猜这个限制从2.2开始解除。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.