Android5.0-主题切换

在Android 5.0之后,有个新特性:Material Design

也可以在5.0之前使用,但是需要创建一个styles资源文件,并且version选择为level 21之上。

要注意的是:这里的Activity不能使用v4包下的ActivityCompat,只能使用Activity。

然后在styles中创建对应的主题,Google官方提供了3种默认的主题:

1.黑色主题: Theme.Material
2.明亮主题: Theme.Material.Light
3.明亮主题黑色: Theme.Material.Light.DarkActionBar


配置主题的时候:

colorPrimaryDark:状态栏的颜色
colorPrimary:ActionBar的颜色
textColorPrimary:ActionBar字体的颜色
windowBackground:界面背景颜色
navigationBarColor:比如华为手机下方按钮的颜色


并且我们可以直接在styles.xml这个文件的右上角,点击open editor,进入主题编辑器,直接编辑主题部分需要显示的颜色


然后就是主题切换部分:

我觉得这部分的逻辑就是,先写好一个主题的配置:比如:

<style name="RedTheme" parent="android:Theme.Material">
	<!-- 状态栏颜色,会被statusBarColor效果覆盖-->
	<item name="android:colorPrimaryDark">@color/status_red</item>
	<!-- 状态栏颜色,继承自colorPrimaryDark -->
	<item name="android:statusBarColor">@color/status_red</item>
	<!-- actionBar颜色 -->
	<item name="android:colorPrimary">@color/action_red</item>
	<!-- 背景颜色 -->
	<item name="android:windowBackground">@color/window_bg_red</item>
	<!-- 底部栏颜色 -->
	<item name="android:navigationBarColor">@color/navigation_red</item>

	<!-- ListView的分割线颜色,switch滑动区域色-->
	<item name="android:colorForeground">@color/fg_red</item>
	<!-- popMenu的背景色 -->
	<item name="android:colorBackground">@color/bg_red</item>

	<!-- 控件默认颜色 ,效果会被colorControlActivated取代  -->
	<item name="android:colorAccent">@color/control_activated_red</item>

	<!-- 控件默认时颜色  -->
	<item name="android:colorControlNormal">@color/control_normal_red</item>
	<!-- 控件按压时颜色,会影响水波纹效果,继承自colorAccent  -->
	<item name="android:colorControlHighlight">@color/control_highlight_red</item>
	<!-- 控件选中时颜色 -->
	<item name="android:colorControlActivated">@color/control_activated_red</item>
	<!-- Button的默认背景 -->
	<item name="android:colorButtonNormal">@color/button_normal_red</item>

	<!-- Button,textView的文字颜色  -->
	<item name="android:textColor">@color/white_text</item>
	<!-- RadioButton checkbox等控件的文字 -->
	<item name="android:textColorPrimaryDisableOnly">@color/white_text</item>
	<!-- actionBar的标题文字颜色 -->
	<item name="android:textColorPrimary">@color/white_text</item>
</style>
然后定义一个静态变量,记录选择下来的主题。然后关闭当前Activity,再打开Activity。但是再打开的过程中,Activity的转场动画去除。

然后在Activity创建之前,对之前定义变量进行判断,通过setTheme方法选择主题。

以下是核心代码:

private void reload() {
	Intent intent = getIntent();
	overridePendingTransition(0, 0);
	finish();
	overridePendingTransition(0, 0);
	startActivity(intent);
}

我写了一个简单的Demo,可以供大家参考: 点击打开链接



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值