Android主题切换之探究白天和夜间模式

这里写图片描述

白天主题

<resources>

  <style name="DayTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">#03A9F4</item>
    <item name="android:textColorPrimary">#ffffff</item>
    <item name="android:windowBackground">@color/background_material_light</item>
    <item name="colorAccent">#00BCD4</item>
    <item name="colorControlNormal">#00BCD4</item>

      </style>

  <style name="DayTitleStyle">
    <item name="android:textColor">#212121</item>
    <item name="android:textSize">20sp</item>
    <item name="android:layout_margin">8dp</item>
  </style>

  <style name="DayContentStyle">
    <item name="android:textColor">#9C27B0</item>
    <item name="android:textSize">16sp</item>
    <item name="android:layout_margin">16dp</item>
    <item name="android:maxLines">10</item>
  </style>

</resources>

夜间主题

<resources>

  <style name="NightTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">#00796B</item>
    <item name="android:textColorPrimary">#212121</item>
    <item name="android:windowBackground">@color/background_material_dark</item>
    <item name="colorAccent">#00796B</item>
    <item name="colorControlNormal">#212121</item>

     </style>

  <style name="NightTitleStyle">
    <item name="android:textColor">#212121</item>
    <item name="android:textSize">20sp</item>
    <item name="android:layout_margin">8dp</item>
  </style>

  <style name="NightContentStyle">
    <item name="android:textColor">#212121</item>
    <item name="android:textSize">16sp</item>
    <item name="android:layout_margin">16dp</item>
    <item name="android:maxLines">10</item>
  </style>

</resources>

布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  tools:context=".MainActivity">



  <Button
    android:id="@+id/btn_setting"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="设置"
    android:background="?attr/buttonBg"
    android:textColor="?attr/buttonTextColor" />

</LinearLayout>

代码实现
最后再贴下代码:
通过一个主题设置工具类设置主题,在每个Activity的setContentView()方法之前设置主题:
设置主题工具类:

public class ThemeChangeUtil {
  public static boolean isChange = false;
  public static void changeTheme(Activity activity){
    if(isChange){
      activity.setTheme(R.style.NightTheme);
    }
  }
}

设置界面:

public class ChangeTheme extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    ThemeChangeUtil.changeTheme(this);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_change);

    Button mChangeBtn = (Button) findViewById(R.id.btn_change);
    mChangeBtn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (ThemeChangeUtil.isChange) {
          ThemeChangeUtil.isChange = false;
        } else {
          ThemeChangeUtil.isChange = true;
        }
        ChangeTheme.this.recreate();//重新创建当前Activity实例
      }
    });
  }

  @Override
  public void onBackPressed() {
    super.onBackPressed();
    Intent mIntent = new Intent(this, MainActivity.class);
    mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(mIntent);
    finish();
  }
}

主界面:


public class MainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    ThemeChangeUtil.changeTheme(this);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button mSettingBtn = (Button) findViewById(R.id.btn_setting);
    mSettingBtn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        MainActivity.this.startActivity(new Intent(MainActivity.this, ChangeTheme.class));
      }
    });
  }
}

猜你喜欢

转载自blog.csdn.net/l6666_6666/article/details/80707929