【发布时间】:2018-01-06 15:26:29
【问题描述】:
目标:我想允许用户更改我的应用的颜色主题。
主题 (styles.xml):
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/indigoColorPrimary</item>
<item name="colorPrimaryDark">@color/indigoColorPrimaryDark</item>
<item name="colorAccent">@color/indigoColorAccent</item>
<item name="android:statusBarColor">@color/indigoColorPrimaryDark</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.FullScreen">
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
<style name="AppTheme.MainActivity">
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
<style name="AppTheme.SearchActivity">
<item name="android:statusBarColor">@android:color/darker_gray</item>
<item name="android:windowAnimationStyle">@null</item>
</style>
<!-- Colors -->
<style name="AppTheme.Indigo">
<item name="colorPrimary">@color/indigoColorPrimary</item>
<item name="colorPrimaryDark">@color/indigoColorPrimaryDark</item>
<item name="colorAccent">@color/indigoColorAccent</item>
<item name="android:statusBarColor">@color/indigoColorPrimaryDark</item>
</style>
<style name="AppTheme.Blue">
<item name="colorPrimary">@color/blueColorPrimary</item>
<item name="colorPrimaryDark">@color/blueColorPrimaryDark</item>
<item name="colorAccent">@color/blueColorAccent</item>
<item name="android:statusBarColor">@color/blueColorPrimaryDark</item>
</style>
<style name="AppTheme.Red">
<item name="colorPrimary">@color/redColorPrimary</item>
<item name="colorPrimaryDark">@color/redColorPrimaryDark</item>
<item name="colorAccent">@color/redColorAccent</item>
<item name="android:statusBarColor">@color/redColorPrimaryDark</item>
</style>
<!-- some other colors -->
</resources>
如您所见,我将主题 AppTheme 作为默认颜色(“靛蓝”)。
我还有其他三个主题 FullScreen、MainActivity 和 SearchActivity 派生自 AppTheme,然后为主题着色。
AndroidManifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.superbstudios.reportnote">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".SignInActivity"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.FullScreen" />
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SearchActivity"
android:label=""
android:theme="@style/AppTheme.SearchActivity"
android:windowSoftInputMode="stateVisible" />
<activity
android:name=".SettingsActivity"
android:label="@string/title_activity_settings"
android:theme="@style/AppTheme" />
<activity
android:name=".GuideActivity"
android:label="@string/title_activity_guide"
android:theme="@style/AppTheme" />
</application>
</manifest>
现在,只有SignInActiviy、MainActivity 和SearchActivity 有自己的主题,其他活动(也是应用程序)有AppTheme。
我的工作:我创建了一个BaseActivity 类,所有活动都扩展了这个类。
在BaseActivity 中onCreate 方法中super 声明之前我使用此代码更改颜色主题:
setTheme(R.style.AppTheme_Red);
问题:此代码更改了所有活动的主题以及需要不同主题的SignInActiviy、MainActivity 和SearchActivity。
我不知道颜色主题是否有用。
我唯一想要的就是像这样更改 AppTheme 颜色:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/redColorPrimary</item>
<item name="colorPrimaryDark">@color/redColorPrimaryDark</item>
<item name="colorAccent">@color/redColorAccent</item>
<item name="android:statusBarColor">@color/redColorPrimaryDark</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
那么,我必须做些什么来改变我的应用的颜色?
【问题讨论】: