Androidでテーマカラーの切り替え機能を実装する方法

Android でテーマカラーの切り替え機能を実装する方法には、一般的に以下のものがあります:

  1. ThemeとAttributeを利用する:Res/valuesディレクトリのstyle.xmlで色を設定したテーマを定義し、レイアウトファイルで適切なAttributeを利用して参照する。
  1. まず、styles.xmlファイルで異なる色のテーマスタイルを定義する。たとえば、
<style name="AppTheme.Red" parent="Theme.AppCompat.Light">
<!-- 修改颜色属性 -->
<item name="colorPrimary">@color/red</item>
<item name="colorPrimaryDark">@color/dark_red</item>
<item name="colorAccent">@color/red_accent</item>
</style>
<style name="AppTheme.Blue" parent="Theme.AppCompat.Light">
<!-- 修改颜色属性 -->
<item name="colorPrimary">@color/blue</item>
<item name="colorPrimaryDark">@color/dark_blue</item>
<item name="colorAccent">@color/blue_accent</item>
</style>
  1. レイアウトファイルでは、テーマのスタイル属性を用いて色を参照します。
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.Button"
android:text="Button" />
  1. 最後に、Java コードでテーマスタイルを切り替えます。例えば、
// 切换到红色主题
setTheme(R.style.AppTheme_Red);
recreate();
  1. 実行時にテーマカラーの値を変更することで切り替え機能を実現する、動的なテーマカラー変更
  1. まず、res/values/colors.xmlファイルで、色値を定義します。例:
<color name="red">#FF0000</color>
<color name="blue">#0000FF</color>
  1. また、Java コードでテーマカラーの値を変更することで切り替えを実装します(例:
// 获取对应的颜色值
int colorPrimary = ContextCompat.getColor(this, R.color.red);
int colorPrimaryDark = ContextCompat.getColor(this, R.color.dark_red);
int colorAccent = ContextCompat.getColor(this, R.color.red_accent);
// 修改主题颜色
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setStatusBarColor(colorPrimaryDark);
}
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(colorPrimary));
button.setBackgroundColor(colorAccent);

また、どちらの方法もテーマを切り替える際にテーマの切り替えを反映させるために、アクティビティを再生成する必要があります。

bannerAds