前言
安卓是自带模式的,我们在styles.xml便可以设置标题栏显示的颜色(白天和夜间模式当然也就可以通过切换主题来实现)
设置切换之间的动画
在res下面新建anim文件夹然后在里面创建切换动画
out.xml
在styles里面设置要切换的主题
在Preferences.class
定义一个传值的类
在UIUtils里面
在MainActivity里面
这样就简单实现了点击button按钮时对白天和黑夜的切换
安卓是自带模式的,我们在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按钮时对白天和黑夜的切换