【问题标题】:Change theme dynamically for multiple view - Android为多个视图动态更改主题 - Android
【发布时间】:2018-06-24 22:35:39
【问题描述】:
我正在尝试在应用设备离线时更改主题。但是要实现更改背景颜色并没有帮助,我需要更改整个视图和文本颜色。但是为此,使用 FindViewById 获取所有视图并不是实现这一目标的有效方法,因为我对 Activity 有很多视图并且我尝试使用主题
<item name="android:textColor">@android:color/black</item>
<item name="android:windowBackground">@android:color/white</item>
但由于它只显示一种颜色的 TextView,我无法使用此方法进行活动,因为它有多种颜色,并且必须在创建活动之前更改主题。
请提供支持多色视图改变主题的解决方案
【问题讨论】:
标签:
android
xml
android-layout
android-theme
【解决方案1】:
public class Utils {
private static int sTheme;
public final static int THEME_MATERIAL_LIGHT = 0;
public final static int THEME_YOUR_CUSTOM_THEME = 1;
public static void changeToTheme(Activity activity, int theme) {
sTheme = theme;
activity.finish();
activity.startActivity(new Intent(activity, activity.getClass()));
activity.overridePendingTransition(android.R.anim.fade_in,
android.R.anim.fade_out);
}
public static void onActivityCreateSetTheme(Activity activity) {
switch (sTheme) {
default:
case THEME_MATERIAL_LIGHT:
activity.setTheme(R.style.Theme_Material_Light);
break;
case THEME_YOUR_CUSTOM_THEME:
activity.setTheme(R.style.Theme_YOUR_CUSTOM_THEME);
break;
}
}
}
在您的活动中:
@Override // Any Activity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// MUST BE SET BEFORE setContentView
Utils.onActivityCreateSetTheme(this);
// AFTER SETTING THEME
setContentView(R.layout.activity_theme);
}