前言
暗黑模式,是Android10(API 29) 及以上版本支持的。
设置方法(themes)
在 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>
在 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>
在 AndroidManifest.xml 文件中的
<application>
标签中添加以下属性:
android:theme="@style/AppTheme"
更多(颜色图片等)
res/values
和 res/values-night
在文件中定义其他样式和属性,例如颜色res/values-night/colors.xml
、字体(themes/android:fontFamily)等。
也可以创建不同模式下的资源文件res/drawable-night
和 res/drawable-night
,来存放适配暗黑模式的资源文件。
也可以创建不同模式下的图片res/mipmap-night
和 res/mipmap-night
,来存放适配暗黑模式的资源文件
切换主题
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);
}
}