为多个视图动态更改主题 - Android

时间:2018-01-16 09:05:21

标签: android xml android-layout android-theme

我正在尝试在应用设备离线时更改主题。但要实现改变背景颜色不会有帮助,我需要改变整个视图和文本颜色。但是为了获得FindViewById的所有视图并不是一个有效的方法来实现这一点,因为我获得了大量的活动视图,因为我尝试使用主题

<item name="android:textColor">@android:color/black</item> <item name="android:windowBackground">@android:color/white</item>

但由于它只显示一个彩色TextView,因此我无法使用此方法进行活动,因为它有多种颜色,并且必须在创建活动之前更改主题。

请提供支持使用多个彩色视图更改主题的解决方案

1 个答案:

答案 0 :(得分:0)

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);
        }