前言
安卓是自带模式的,我们在styles.xml便可以设置标题栏显示的颜色(白天和夜间模式当然也就可以通过切换主题来实现)
设置切换之间的动画
在res下面新建anim文件夹然后在里面创建切换动画
in.xml
<!-- interpolator 这个是动画变化的频率 快 慢 等--> <alpha android:duration="0" android:fromAlpha="0.0" android:interpolator="@android:anim/accelerate_interpolator" android:toAlpha="1.0"> </alpha>
out.xml
<alpha android:duration="0" android:fromAlpha="1.0" android:interpolator="@android:anim/decelerate_interpolator" android:toAlpha="0.0"> </alpha>
在styles里面设置要切换的主题
<!-- 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> </style> <!--黑夜主题--> <style name="AppTheme.Black" parent="Theme.AppCompat"> </style>
在Preferences.class
定义一个传值的类
ublic class Preferences { private static final String shared_name="guide"; private static SharedPreferences sp; public static String getString(Context context, String key, String defaultValues) { sp = context.getSharedPreferences(shared_name, context.MODE_PRIVATE); return sp.getString(key, defaultValues); } public static void setString(Context context, String key, String Values) { sp = context.getSharedPreferences(shared_name, context.MODE_PRIVATE); sp.edit().putString(key, Values).commit(); } }
在UIUtils里面
public class UiUtils { //获取主题 public static int getAppTheme(Context ctx) { // 给他的默认值是1默认是白天模式 String value = Preferences.getString(ctx, "activity_theme", "1"); switch (Integer.valueOf(value)) { case 1: //默认系统自带的主题 return R.style.AppTheme;//白色主题 case 2: return R.style.AppTheme_Black; default: return R.style.AppTheme;//默认白色 } } // 通过点击时给activity_theme不同的值 public static void switchAppTheme( Context ctx){ String value = Preferences.getString(ctx, "activity_theme", "1"); switch (Integer.valueOf(value)){ case 1: Preferences.setString(ctx, "activity_theme", "2"); break; case 2: Preferences.setString(ctx, "activity_theme", "1"); break; default: Preferences.setString(ctx, "activity_theme", "1"); break; } } }
在MainActivity里面
public class MainActivity extends AppCompatActivity { private int theme = 0; @Override protected void onCreate(Bundle savedInstanceState) { //切换主题必须放在onCreate()之前 if (savedInstanceState == null) { // 如果么有 theme = UiUtils.getAppTheme(MainActivity.this); } else { theme = savedInstanceState.getInt("theme"); } // 可以设置主题的 方法 在oncreate之前调用 setTheme(theme); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //点击按钮时实现白天和黑夜的切换并实现效果 public void Buttons (View view){ UiUtils.switchAppTheme(MainActivity.this); load(); } // 切换之间的动画 public void load() { Intent intent = getIntent(); overridePendingTransition(R.anim.in, R.anim.out);//进入动画 finish(); overridePendingTransition(R.anim.in, R.anim.out); startActivity(intent); } }
这样就简单实现了点击button按钮时对白天和黑夜的切换