繁体   English   中英

Android:动态更改应用程序主题

[英]Android: Change application theme dynamically

这是我的应用程序实际的style.xml:

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:alertDialogTheme">@style/customDialog</item>
    <item name="android:actionBarStyle">@style/customActionBar</item>
</style>


<style name="LoginStyle" parent="AppTheme.Base">
    <item name="colorPrimaryDark">@color/Material_Blue</item>
    <item name="colorControlNormal">#c5c5c5</item>
    <item name="colorControlActivated">#FFFFFF</item>
    <item name="colorControlHighlight">#FFFFFF</item>
</style>

<style name="MainStyle" parent="AppTheme.Base">
    <item name="android:actionBarTheme">@style/customActionBar</item>
    <item name="android:colorAccent">@color/md_material_blue_600</item>
    <item name="colorPrimaryDark">@color/Material_Blue</item>
    <item name="colorControlNormal">@color/md_material_blue_600</item>
    <item name="colorControlActivated">@color/md_material_blue_600</item>
    <item name="colorControlHighlight">@color/md_material_blue_600</item>
</style>

<style name="customDialog">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
    <item name="colorControlActivated">@color/md_material_blue_600</item>
    <item name="android:colorControlHighlight">@color/md_material_blue_600</item>
    <item name="android:button">@color/md_material_blue_600</item>
</style>

<style name="customActionBar">
    <item name="android:background">@color/Material_Blue</item>
</style>

如您所见,我的应用程序具有一些不同的主题,但是现在一些用户要求我实现可以将“浅色主题”切换为“深色主题”的功能。 现在,如果我将AppTheme.Base的主题父级AppTheme.BaseTheme.AppCompat ,则整个应用程序将获得“深色主题”。

那么,有没有办法改变基本主题的父主题? 还是我需要做些什么才能获得结果?

我读过这篇文章: https : //stackoverflow.com/a/18301723/5327202 ,我已经实现了这些类,但是它只会将文本颜色更改为白色,而没有其他任何更改(当然,我在xml;基本上,我已经复制粘贴了原始主题,然后将AppTheme.BaseTheme.AppCompat更改为Theme.AppCompat

谢谢。

为此上下文设置基本主题。 请注意,应在Context中实例化任何视图之前(例如,在调用setContentView(View)或inflate(int,ViewGroup)之前)调用此方法。

检查http://developer.android.com/reference/android/content/Context.html#setTheme%28int%29

public void onCreate(Bundle savedInstanceState) {
    setTheme(android.R.style.Theme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM