废话不多说,直接看实现代码
在资源文件attrs中,定义好需要切换的属性
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <attr name="bg_listview_item" format="reference"/>
- </resources>
这里的bg_listview_item,是一个跟liestview的item相关的属性,这样,我们在切换日夜间模式的时候,就能改变liestview的item背景
接下来,我们在资源文件styles中,定义好两种主题
- <style name="AppBaseTheme_Day" parent="android:Theme.Holo.Light"></style>
- <style name="AppBaseTheme_Night" parent="android:Theme.Holo"></style>
- <style name="AppTheme_Day" parent="AppBaseTheme_Day">
- <item name="bg_listview_item">@drawable/listview_item_selector_day</item>
- </style>
-
- <style name="AppTheme_Night" parent="AppBaseTheme_Night">
- <item name="bg_listview_item">@drawable/listview_item_selector_night</item>
- </style>
可以看到,在AppTheme_Day中,属性bg_listview_item引用listview_item_selector_day;在AppTheme_Night中,属性bg_listview_item引用listview_item_selector_night;
在Listview的子Item的布局文件中,background只需要引用前面定义好的属性,这样就能够根据不同的模式,ListView的子Item应用不同的背景颜色
- android:background="?bg_listview_item"
这样当我们点击切换按钮的时候,就可以手动切换模式了
- Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();
- editor.putBoolean("Mode", !isNight);
- editor.commit();
-
- finish();
- overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
- startActivity(this.getIntent());
下面,就是在Activity的oncreate()中,实现日夜间模式的切换
- isNight = sharedPreferences.getBoolean("Mode", false);
- if (isNight) {
- setTheme(R.style.AppTheme_Night);
- }else {
- setTheme(R.style.AppTheme_Day);
- }