夜间切换模式

1.在 colors.xml 中定义两组颜色,分别表示日间和夜间的主题色:

<?xml version= "1.0" encoding= "utf-8" ?>
<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>
2.在 styles.xml 中定义两组主题,也就是日间主题和夜间主题:

< resources >
 
  <!-- 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 >
 
</ resources >
3.在values新建mainBackground.xml:
<? xml version = "1.0" encoding = "utf-8" ?>
< resources >
  < attr name = "mainBackground" format = "color|reference" ></ attr >
</ resources >

4.布局 activity_main.xml:
<? xml version = "1.0" encoding = "utf-8" ?>
< RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
  android:layout_width = "match_parent"
  android:layout_height = "match_parent"
  android:background = "?attr/mainBackground"
  >
 
  < Button
   android:id = "@+id/btn_theme"
   android:layout_width = "match_parent"
   android:layout_height = "wrap_content"
   android:text = "切换日/夜间模式" />
 
  < TextView
   android:id = "@+id/tv"
   android:layout_below = "@id/btn_theme"
   android:layout_width = "match_parent"
   android:layout_height = "wrap_content"
   android:gravity = "center_horizontal"
   android:text = "通过setTheme()的方法" />
 
</ RelativeLayout >

5.最后就是 MainActivity 的代码:
public class MainActivity extends AppCompatActivity {
 
  // 默认是日间模式
  private int theme = R.style.AppTheme;
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
   super .onCreate(savedInstanceState);
  // 判断是否有主题存储
   if (savedInstanceState != null ){
    theme = savedInstanceState.getInt( "theme" );
    setTheme(theme);
   }
   setContentView(R.layout.activity_main);
 
   Button btn_theme = (Button) findViewById(R.id.btn_theme);
   btn_theme.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" );
  }
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值