Ответ 1
Попробуй, все будет хорошо.
remoteView.setInt(R.id.message, "setBackgroundColor",
android.graphics.Color.BLACK);
Я пытаюсь создать 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: view: android.widget.TextView не может используйте метод RemoteViews: setBackgroundResource (целое)
Попробуй, все будет хорошо.
remoteView.setInt(R.id.message, "setBackgroundColor",
android.graphics.Color.BLACK);
Если вы хотите установить цвет самого текста, используйте
remoteViews.setInt(R.id.tvAmountThisYear, "setTextColor",
android.graphics.Color.RED);
Если у вас есть какая-то форма в качестве фона текстового поля, где фон определен в некотором ресурсе, который можно выделить, вы можете использовать
remoteViews.setInt(R.id.change,"setBackgroundResource", R.drawable.my_drawable_new);
В приведенной выше инструкции кода R.id.change - это TextView с некоторым фоновым ресурсом, и вы определили некоторые ресурсы (my_drawable и мой drawable_new) в вашей папке с выделением.
<TextView
android:id="@+id/change"
android:background="@drawable/my_drawable">
</TextView
Томас прав. Мое решение состоит в том, чтобы сделать два вида с соответствующими фонами и сделать один НЕВИДИМЫЙ, а другой - ВИДИМЫМ. Конечно, это работает только с небольшим количеством фонов, например, "зеленый" и "красный", которые могут указывать на какое-то состояние.
Как и для Android 2.2, этот метод можно назвать не раньше.
contentView.setInt(R.id.tv_contactText, "setBackgroundColor", Color.parseColor(hexColor));
Причина в том, что с помощью RemoteViews вы можете вызывать только ограниченное количество методов. В случае, если это запрещено, вы получаете сообщение вроде этого.
Том
Что я нахожу странным в этом, так это то, что он отлично работает на моей nexus one (2.2), но совсем не на HTC Tattoo (1.6). Я попытаюсь запустить некоторые тесты эмулятора и посмотреть, не является ли это еще одним случаем HTC, лениво реализующим некоторый базовый код визуализации UI, который я уже нашел с помощью Tattoo (Layouts визуализируется иначе, чем на бирже Android 1.6).
На каком устройстве вы тестировали это?
Эмулятор позволит это пройти, когда вы запустите эмулятор 2.2, поэтому я думаю, что ограничение снято с 2.2.