一个应用程序中的多个主题

在 Android 应用程序中使用多个主题,你可以为每个主题添加自定义颜色,如下所示:

OneTheme TwoTheme

首先,我们必须将我们的主题添加到 style.xml,如下所示:

<style name="OneTheme" parent="Theme.AppCompat.Light.DarkActionBar">

</style>

<!--  -->
<style name="TwoTheme" parent="Theme.AppCompat.Light.DarkActionBar" >

</style>
......

在上面你可以看到 OneThemeTwoTheme

现在,转到你的 AndroidManifest.xml 并将这一行:android:theme="@style/OneTheme" 添加到你的应用程序标签中,这将使 OneTheme 成为默认主题:

<application
        android:theme="@style/OneTheme"
        ...>

创建名为 attrs.xml 的新 xml 文件并添加以下代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="custom_red" format="color" />
    <attr name="custom_blue" format="color" />
    <attr name="custom_green" format="color" />
</resources>
<!-- add all colors you need (just color's name) -->

返回 style.xml 并添加这些颜色及其每个主题的值:

<style name="OneTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="custom_red">#8b030c</item>
    <item name="custom_blue">#0f1b8b</item>
    <item name="custom_green">#1c7806</item>
</style>

<style name="TwoTheme" parent="Theme.AppCompat.Light.DarkActionBar" >
    <item name="custom_red">#ff606b</item>
    <item name="custom_blue">#99cfff</item>
    <item name="custom_green">#62e642</item>
</style>

现在你有每个主题的自定义颜色,让我们将这些颜色添加到我们的视图中。

使用“?attr /” 将 custom_blue 颜色添加到 TextView:

转到你的 imageView 并添加此颜色:

<TextView>
    android:id="@+id/txte_view"
    android:textColor="?attr/custom_blue" />

我们可以通过单行 setTheme(R.style.TwoTheme); 改变主题这条线必须在 onCreate() 方法中的 setContentView() 方法之前,就像这个 Activity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.TwoTheme);
    setContentView(R.layout.main_activity);
    ....
}

一次更改所有活动的主题

如果我们想要更改所有活动的主题,我们必须创建名为 MyActivity extends AppCompatActivity class(或 Activity 类)的新类,并将 onhuan12 行添加到 onCreate() 方法:

public class MyActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (new MySettings(this).isDarkTheme())
            setTheme(R.style.TwoTheme);
    }
}

最后,转到所有活动,添加 make all all 扩展 MyActivity 基类:

public class MainActivity extends MyActivity {
    ....
}

要更改主题,只需转到 MyActivity 并将 R.style.TwoTheme 更改为你的主题(R.style.OneThemeR.style.ThreeTheme ….)。