Administrator
发布于 2023-11-26 / 30 阅读
0
0

android切换暗黑模式

前言

暗黑模式,是Android10(API 29) 及以上版本支持的。

设置方法(themes)

  1. 在 res/values 文件夹下创建一个名为 themes.xml (浅色模式)的文件,并添加以下内容:

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <!-- Light mode -->
		<item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
    </style>

</resources>
  1. 在 res/values-night 文件夹下创建一个名为 themes.xml (暗黑模式)的文件,并添加以下内容:

<resources>
    <style name="AppTheme" parent="Theme.AppCompat">
        <!-- Dark mode -->
		<item name="colorPrimary">@color/color6</item>
        <item name="colorPrimaryVariant">@color/color5</item>
        <item name="colorOnPrimary">@color/color4</item> <!-- button 颜色 根据这个-->
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/color3</item>
        <item name="colorSecondaryVariant">@color/color2</item>
        <item name="colorOnSecondary">@color/color1</item>
        <item name="android:textColor">@color/color7</item>
    </style>
</resources>
  1. 在 AndroidManifest.xml 文件中的 <application> 标签中添加以下属性:

android:theme="@style/AppTheme"

更多(颜色图片等)

res/valuesres/values-night在文件中定义其他样式和属性,例如颜色res/values-night/colors.xml、字体(themes/android:fontFamily)等。

也可以创建不同模式下的资源文件res/drawable-nightres/drawable-night,来存放适配暗黑模式的资源文件。

也可以创建不同模式下的图片res/mipmap-nightres/mipmap-night,来存放适配暗黑模式的资源文件

uimodel.jpg

切换主题

1.跟随系统主题

将根据设备的主题设置自动切换到相应的暗黑模式或浅色模式。

2.手动切换

在运行时手动切换暗黑模式,调用AppCompatDelegate 类的 setDefaultNightMode() 方法

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 设置默认的夜间模式
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
    }
}


评论