Android AppWidget TextView: Как выбрать цвет фона во время выполнения

Я пытаюсь создать 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 (интервал)

23
задан Amit 1 April 2010 в 05:05
поделиться

3 ответа

Причина в том, что через RemoteViews вы можете вызывать только ограниченное количество методов. В случае, если это запрещено, вы получите сообщение вроде этого.

Tom

0
ответ дан 29 November 2019 в 00:45
поделиться

Томас прав. Мое решение - сделать два вида с соответствующими фонами и сделать одно НЕВИДИМЫМ, а другое ВИДИМОМ. Конечно, это работает только с небольшим количеством фонов, например, «зеленый» и «красный», которые могут указывать на какое-то состояние.

1
ответ дан 29 November 2019 в 00:45
поделиться

Что мне показалось странным, так это то, что он отлично работает на моем nexus one (2.2), но не на HTC Tattoo (1.6). Я собираюсь попробовать запустить несколько тестов эмулятора и посмотреть, не является ли это еще одним случаем, когда HTC лениво реализует некоторый базовый код рендеринга пользовательского интерфейса, который я уже нашел с помощью Tattoo (макеты отображаются иначе, чем на стандартном Android 1.6).

На каком устройстве вы это тестировали?

0
ответ дан 29 November 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: