目录
动态实时更新主题
第一步:编写attr文件
在res文件下的values文件中新建一个attr.xm的文件
然后写上你要更换颜色的名字 这是我编写的,是用与更换xml布局中的颜色和在Them中调用这个颜色
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="title_color" format="color"/>//标题的颜色
<attr name="back_color" format="color"/>//返回上一个页面的颜色
<attr name="function_color" format="color"/>//功能菜单项的颜色
<attr name="bg_color" format="color"/>//背景色
</resources>
第二步:定义多个Them 主题颜色 用于切换
<style name="Theme.My_Page" parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/white</item>//标题的背景色
<item name="colorPrimaryVariant">#CDCDCD</item>//状态栏的颜色
//以上都是系统自带的
//下面是我定义的颜色
<item name="title_color">@color/black</item>
<item name="back_color">@color/back1_color</item>
<item name="function_color">@color/white</item>
<item name="bg_color">@color/bg1_color</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" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
<style name="Them_Yellow" parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge">
<!-- Primary brand color. -->
<item name="colorPrimary">#FF9800</item>
<item name="colorPrimaryVariant">#CDCDCD</item>
<item name="title_color">@color/white</item>
<item name="back_color">@color/back1_color</item>
<item name="function_color">#FFE500</item>
<item name="bg_color">#FFE927</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" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
<style name="Them_green" parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge">
<!-- Primary brand color. -->
<item name="colorPrimary">#8BC34A</item>
<item name="colorPrimaryVariant">#CDCDCD</item>
<item name="title_color">@color/white</item>
<item name="back_color">@color/back1_color</item>
<item name="function_color">#89FF00</item>
<item name="bg_color">#96FF1B</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" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
<style name="Them_blue" parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge">
<!-- Primary brand color. -->
<item name="colorPrimary">#2196F3</item>
<item name="colorPrimaryVariant">#CDCDCD</item>
<item name="title_color">@color/white</item>
<item name="back_color">#C4E5FF</item>
<item name="function_color">#2BBDFF</item>
<item name="bg_color">#41C4FF</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" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
其中 Them.My_Page 默认是系统的主题 在我们的 AndroidManifest.xml文件里
第三步:在xml布局中设置颜色
请根据自己的需要来实现 我来这只是让你理解怎么使用动态更新主题 如果需要源码的话 请私信我 谢谢!
第三步:在代码中设置 重要‼️
setTheme()方法就是改变当前的主题,他必须要在构建布局前使用,意思就是说必须要 在setContentView()前调用
使用方法
setTheme(R.style.Theme_My_Page);
setContentView(R.layout.activity_them);
//重新构建布局后 所有的方法重新运行一遍
allMonth();
//这是SP存储 是后面的操作所需要的 你要根据自己的需要所定义
SP.set(ThemActivity.this,"them",R.style.Theme_My_Page);
SP.set(ThemActivity.this,"current",currentIndex);
第四步:SP存储,自定义的类 有需要的可以看看
public class SP {
public static SharedPreferences sharedPreferences;
public static void set(Activity activity, String key, int value) {
sharedPreferences = activity.getSharedPreferences(key, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(key, value);
editor.apply();
}
public static Integer get (Activity activity,String key){
return activity.getSharedPreferences(key,Context.MODE_PRIVATE).getInt(key,0);
}
}