http://www.52jb.net/shouji/3824.html
(这里面总共有三种设置方式)
我这里介绍的是第一种方式(不建议大家用)建议大家用上面博客里的第三种:它不会销毁Activity再重新创建;
第一种设置夜间模式:通过重新给Activity设置主题,然后销毁Activity,再创建Activity,重新设置的主题才有效
1.在values中的colors里设置颜色
(colors里面本身有的是默认的白天模式,在添加上下面这些,属于夜间模式)
2.在style.xml中定义两组主题,也就是白天和晚上
3.创建attrs.xml文件
<attr
name=
"mainBackground"
format=
"color|reference"
/>
4.需要夜间模式的布局引用attr自定义属性
5.java代码
a.判断存储的类型
b.点击事件,根据类型进行日夜的切换
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView tv;
//默认是日间模式
private int theme=R.style.AppTheme; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//判断是否有主题存储(一定要放到setContentView();方法之前设置。)
if (savedInstanceState!=null){
theme=savedInstanceState.getInt("theme");
setTheme(theme);
}
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.tv);
//设置点击事件
tv.setOnClickListener(this);
}
//根据点击事件,完成日夜间模式切换;
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.tv:
//切换日间模式代码
//括号里属于判断,如果是true,执行第一(也就是冒号之前)
//如果是flase执行第二个(冒号后面的)
//三元运算符比if else效率高
theme = (theme == R.style.AppTheme) ? R.style.NightAppTheme : R.style.AppTheme;
recreate();
break;
}
} /* @Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outState.putInt("theme",theme);//存属性
}*/
//比较上面和下面的这两个什么区别;
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("theme",theme);
} @Override
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onRestoreInstanceState(savedInstanceState, persistentState);
theme = savedInstanceState.getInt("theme");//取属性
}
}
下面是需要注意的: