首页 > 代码库 > 设置主题,夜间模式,按钮点击事件主题由白色变黑色

设置主题,夜间模式,按钮点击事件主题由白色变黑色

 

 

下面是错误的代码:主题不会更改

原因:从桌面打开的Activity 会自动打开一个任务栈

技术分享

   <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <!--toolbar小汉堡样式-->
        <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
        <item name="android:windowBackground">@android:color/white</item>
    </style>

    <style name="AppTheme.Black">
        <item name="android:windowBackground">@android:color/black</item>
    </style>

    <!--小汉堡颜色为白色-->
    <style name="DrawerArrowStyle" parent="@style/Widget.AppCompat.DrawerArrowToggle">
        <item name="color">@android:color/white</item>
    </style>

 

下面代码如果取消动画的话,点击完会先执行切换页面动画,再执行设置主题;用户体验不好


           private static int mTheme = -1;


           @Override
           protected void onCreate(Bundle savedInstanceState) {


          // 设置主题,必须在 super.onCreate 之前执行
          if (mTheme!=-1){
               setTheme(mTheme);
          }


          super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);


         findViewById(R.id.btn_default).setOnClickListener(this);
             findViewById(R.id.btn_black).setOnClickListener(this);

         }


@Override
public void onClick(View v) { switch (v.getId()){ case R.id.btn_default: mTheme = R.style.AppTheme; break; case R.id.btn_black: mTheme = R.style.AppTheme_Black; break; } Intent intent = new Intent(this,MainActivity.class); startActivity(intent); // 设置转场动画,不设置的话 切换界面 会执行动画 overridePendingTransition(0,0);
finish(); overridePendingTransition(
0,0
);//退出时候的动画 }

 

设置主题,夜间模式,按钮点击事件主题由白色变黑色