Применение темы к приложению

Я пытаюсь определить тему для 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, я предлагаю следующее простое решение – просто переключитесь между файлами макета:

Предположим, у нас есть два разных макета:

  • layout1.xml
  • layout2.xml

Мы устанавливаем наш макет следующим образом:

 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, где я нашел тот пример темы, который я действительно предпочитаю загружать в манифест на мою активность