📅  最后修改于: 2023-12-03 15:36:50.976000             🧑  作者: Mango
在 Android 应用程序中,我们通常需要在不同的场景下使用不同的材质(Material Design),例如在不同的主题、不同的版本,或者是用户的个性化设置下。本教程将介绍如何在 Android 应用程序中切换不同的材质,使用 Java 语言编写。
在开始之前,需要在 Android Studio 的 build.gradle 文件中引入 material design 库:
implementation 'com.google.android.material:material:1.4.0'
同时,需要在 AndroidManifest.xml 文件中声明应用的主题:
<application
...
android:theme="@style/AppTheme">
...
</application>
在 values 文件夹下(如果没有则需要新建),创建名为 colors.xml 的文件,定义应用程序的主色调和亮度等颜色属性:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#2196F3</color>
<color name="colorPrimaryDark">#1976D2</color>
<color name="colorAccent">#FF4081</color>
<color name="colorSurface">#FFFFFF</color>
<color name="colorOnSurface">#000000</color>
<color name="colorBackground">#F2F2F2</color>
<color name="colorOnBackground">#000000</color>
</resources>
在 styles.xml 文件中,定义应用程序的默认主题样式:
<resources>
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowBackground">@color/colorBackground</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:navigationBarColor">@color/colorPrimaryDark</item>
<item name="android:colorForeground">@color/colorOnSurface</item>
<item name="android:colorBackground">@color/colorSurface</item>
<item name="android:textColor">@color/colorOnBackground</item>
</style>
</resources>
要切换主题,我们需要在代码中动态设置应用程序的主题样式。首先,我们需要定义一个名为 setTheme
的静态方法:
public static void setTheme(Context context, int themeId) {
context.setTheme(themeId);
SharedPreferences.Editor editor = context.getSharedPreferences("theme", Context.MODE_PRIVATE).edit();
editor.putInt("current_theme", themeId);
editor.apply();
((Activity) context).recreate();
}
该方法有两个参数,第一个参数是应用程序的 Context
对象,第二个参数是要设置的主题的 int
值。该方法将传入的主题值保存到 SharedPreferences 中,并调用 Activity
的 recreate()
方法重新创建 Activity
。
定义好了 setTheme
方法之后,我们需要在应用程序中调用该方法,例如在点击切换按钮时:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (getTheme() == R.style.Theme_MyApp_Light) {
setTheme(MainActivity.this, R.style.Theme_MyApp_Dark);
} else {
setTheme(MainActivity.this, R.style.Theme_MyApp_Light);
}
}
});
在这个示例中,我们定义了两种主题样式 Theme_MyApp_Light
和 Theme_MyApp_Dark
,并在按钮的点击事件中根据当前的主题值切换不同的主题。
要切换材质,我们需要在布局文件中使用 Material Design 的组件,并且根据当前主题设置不同的颜色值。例如,在使用 Button
组件时:
<com.google.android.material.button.MaterialButton
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/switch_theme"
app:backgroundTint="?attr/colorSecondary"
app:rippleColor="?attr/colorSurface" />
在这个示例中,我们使用了 MaterialButton
组件,并设置了 backgroundTint
和 rippleColor
属性。这两个属性的值都是 ?attr/xxx
的形式,代表使用当前主题中的对应颜色值,例如 ?attr/colorSecondary
代表当前主题中的 colorSecondary
对应的颜色值。
通过本教程的学习,你已经了解了如何在 Android 应用程序中切换不同的主题和材质。同时,你也了解了如何使用 Material Design 的组件和颜色属性,为你的应用程序增添更多的美感和功能。