Я пытаюсь определить тему для appwidget и применить ее на уровне приложения. У меня есть такая тема,
<style name="theme.dark"> <item name="android"background">#000000</item> </style>
В моем манифесте я установил android:theme="@style/theme.dark"
в приложении. Однако, когда я запускаю appwidget, он не поднимает элементы из стиля. Я попытался установить style="@style/theme.dark"
на отдельный элемент в макете просмотра, и это действительно работает … но это не то, что я хочу. Я не хочу вызывать определенный стиль = "…" для каждого элемента в моем представлении. эта страница,
http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html
Имеет отличный пример приложения для использования тем / стилей, и он отлично работает. Единственное различие заключается в том, что это приложение .. и оно задает тему активности, а не приложения.
Я также попытался настроить тему в программном режиме на объекте Context, используя setTheme (…) в onHandleUpdate () приложения, перед тем как доступ к представлению открывается. Это тоже не работает.
есть идеи? Благодарю.
Ответ заключается в том, что вы не можете динамически применять тему к appwidget. Нет решения, кроме предоставления нескольких макетов, каждый из которых статически ссылается на определенную тему, а затем выбирает правильную тему / макет при создании ваших удаленных просмотров.
Поскольку мы не можем динамически использовать тему в appwidget, я предлагаю следующее простое решение – просто переключитесь между файлами макета:
Предположим, у нас есть два разных макета:
Мы устанавливаем наш макет следующим образом:
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.layout1);
И когда нам нужно, мы переключим его на второй:
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.layout2);
Это решение отлично работает для меня.
Используйте setVisibility
чтобы скрыть макеты с его собственными стилями в фоновом режиме. Как это:
public static void changeWidgetState(RemoteViews remoteView, int state){ switch (state){ case 0:{ remoteView.setViewVisibility(R.id.widgetLayout1, View.VISIBLE); remoteView.setViewVisibility(R.id.widgetLayout2, View.GONE); } break; case 1:{ remoteView.setViewVisibility(R.id.widgetLayout1, View.GONE); remoteView.setViewVisibility(R.id.widgetLayout2, View.VISIBLE); } break; ... default: } }
XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/widgetLayout0" android:layout_width="150dip" android:layout_height="wrap_content" > <!--Normal Theme Black Text --> <RelativeLayout android:id="@+id/widgetLayout1" android:layout_height="fill_parent" android:layout_width="fill_parent" style="@style/WidgetBackgroundNormal" /> <!--Yellow Theme Black Text --> <RelativeLayout android:id="@+id/widgetLayout2" android:layout_height="fill_parent" android:layout_width="fill_parent" style="@style/WidgetBackgroundYellow" /> ... <LinearLayout android:orientation="vertical" android:layout_height="fill_parent" android:layout_width="fill_parent" android:paddingTop="7dip" > <TextView android:id="@+id/widget_server_name" style="@style/Text.DefinitionWhite" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="left" android:layout_marginLeft="10dip" /> .... </LinearLayout> </RelativeLayout>
Используйте style="@android:style/
Widget.(THEME).(CONTROLTYPE)
"
в соответствующем макете, например Holo на кнопке :
<Button android:id="@+id/button1" style="@android:style/Widget.Holo.Button" android:layout_width="wrap_content" android:layout_height="wrap_content" />
style=
выше будет Theme.Holo
кнопку, эквивалентную той настройке android:theme="android:
Theme.Holo
"
в манифесте будет делать с этой кнопкой, были ли это действия.
Использование ContextThemeWrapper должно сделать трюк http://developer.android.com/reference/android/view/ContextThemeWrapper.html
Попробуйте
@Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); setTheme(R.style.Custom_Theme); }
Я отсылаю вас к DeveloperLife, где я нашел тот пример темы, который я действительно предпочитаю загружать в манифест на мою активность