日夜间模式切换:
1.values文件夹下属性的配置android:background="?attr/mainBackground"
--colors.xml
<resources> <color name="colorPrimary">#3F51B5</color> <color name="colorPrimaryDark">#303F9F</color> <color name="colorAccent">#FF4081</color> <color name="nightColorPrimary">#3b3b3b</color> <color name="nightColorPrimaryDark">#383838</color> <color name="nightColorAccent">#a72b55</color> </resources>--mainBackground.xml
<resources> <attr name="mainBackground" format="color|reference"></attr> </resources>--styles.xml 配置两套主题
<!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:textColor">@android:color/black</item> <item name="mainBackground">@android:color/white</item> </style> <style name="NightAppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/nightColorPrimary</item> <item name="colorPrimaryDark">@color/nightColorPrimaryDark</item> <item name="colorAccent">@color/nightColorAccent</item> <item name="android:textColor">@android:color/white</item> <item name="mainBackground">@color/nightColorPrimaryDark</item> </style>2.在layout布局中引用
android:background="?attr/mainBackground"3.代码中
public class MainActivity extends AppCompatActivity { // 默认是日间模式 private int theme = R.style.AppTheme; @Override protected void onCreate(Bundle savedInstanceState) { // 判断是否有主题存储 if(savedInstanceState != null){ theme = savedInstanceState.getInt("theme"); //设置主题 此方法必须在setContentView()方法之前调用 setTheme(theme); } super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button theme_button = (Button) findViewById(R.id.button); theme_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { theme = (theme == R.style.AppTheme) ? R.style.NightAppTheme : R.style.AppTheme; MainActivity.this.recreate(); } }); } //保存主题,一般保存的是瞬时数据 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("theme", theme); } //恢复数据 @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); theme = savedInstanceState.getInt("theme"); } }