开关按钮实现日夜模式切换

废话不多说,直接看实现代码

在资源文件attrs中,定义好需要切换的属性

[html]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <attr name="bg_listview_item" format="reference"/>  
  4. </resources>  
这里的bg_listview_item,是一个跟liestview的item相关的属性,这样,我们在切换日夜间模式的时候,就能改变liestview的item背景


接下来,我们在资源文件styles中,定义好两种主题

[html]  view plain  copy
  1. <style name="AppBaseTheme_Day" parent="android:Theme.Holo.Light"></style>  
  2. <style name="AppBaseTheme_Night" parent="android:Theme.Holo"></style>  
  3. <style name="AppTheme_Day" parent="AppBaseTheme_Day">  
  4.     <item name="bg_listview_item">@drawable/listview_item_selector_day</item>  
  5. </style>  
  6.   
  7.  <style name="AppTheme_Night" parent="AppBaseTheme_Night">  
  8.     <item name="bg_listview_item">@drawable/listview_item_selector_night</item>  
  9. </style>  
可以看到,在AppTheme_Day中,属性bg_listview_item引用listview_item_selector_day;在AppTheme_Night中,属性bg_listview_item引用listview_item_selector_night;

在Listview的子Item的布局文件中,background只需要引用前面定义好的属性,这样就能够根据不同的模式,ListView的子Item应用不同的背景颜色

[html]  view plain  copy
  1. android:background="?bg_listview_item"  


这样当我们点击切换按钮的时候,就可以手动切换模式了

[html]  view plain  copy
  1. Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();  
  2.     editor.putBoolean("Mode", !isNight);  
  3.     editor.commit();  
  4.   
  5.     finish();  
  6.     overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);  
  7.     startActivity(this.getIntent());  


下面,就是在Activity的oncreate()中,实现日夜间模式的切换

[java]  view plain  copy
  1. isNight = sharedPreferences.getBoolean("Mode"false);  
  2. if (isNight) {  
  3.     setTheme(R.style.AppTheme_Night);  
  4.     }else {  
  5.     setTheme(R.style.AppTheme_Day);  
  6.      }  


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值