持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
多语言模式
不同的语言归不同的String 文件夹管理 默认是英文,在values的Strings 文件夹下
- 新建资源文件夹
2.
- 同一份key必须要同时存在与两份文件中
- 此时程序会自动根据系统的语言 来判断使用中文还是英文
- locale类
Locale 表示地区。每一个Locale对象都代表了一个特定的地理、政治和文化地区。
- local对象的获取
获取默认的地区
Locale locale = Locale.getDefault()
2.静态对象
Locale locale = Locale.SIMPLIFIED_CHINESE
- 动态改变 app语言简单封装
/**
* 修改语言
*
* @param activity 上下文
* @param language 例如修改为 英文传“en”,参考上文字符串常量 (此处语言可以sp来持久化储存 )
* @param cls 要跳转的类(一般为入口类)
*/
public static void changeLanguage(Activity activity, String language, Class<?> cls){
Resources resources=activity.getResources();
Configuration configuration = resources.getConfiguration();
Locale locale;
if (language.equals("en")){
locale=Locale.getDefault();// 获取跟随系统的语言
}else {
locale = Locale.CHINA;
}
configuration.setLocale(locale);//设置语言
DisplayMetrics displayMetrics=resources.getDisplayMetrics();
resources.updateConfiguration(configuration,displayMetrics);//更新配置
// 重启app
Intent intent = new Intent(activity,cls);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
activity.startActivity(intent);
}
调用activity.recreate()方法会闪动;
重启后对于一些数据的保存与切换后的显示我们可以用savedInstanceState来保存与复原
除此之外还需要调用Android的kv键值对存储方案SP、dataStore、MMKV 来存储上一次用户的偏好设置 。
Android 黑夜模式
- 建立如图文件夹
- 基本的引用与多语言配置相似
- 创建 values-night文件夹
- 在colors 和 themes文件夹中对应Android 不同的地方修改颜色即可
if (AppCompatDelegate.getDefaultNightMode()==AppCompatDelegate.MODE_NIGHT_YES){
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);//白天
}else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);//黑夜
}
recreate();//僵硬 加过度动画
getWindow().setWindowAnimations(R.style.OutInAnimation);
在value-night 文件加中可以对默认的theme文件夹进行修改,从而不使用默认的黑夜模式,可以根据自己的想法来自定义