Android多语言与黑夜模式设置

257 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情

多语言模式

不同的语言归不同的String 文件夹管理 默认是英文,在values的Strings 文件夹下

  1. 新建资源文件夹

image-20220712161401606

2.image-20220712161634499

  • 同一份key必须要同时存在与两份文件中
  • 此时程序会自动根据系统的语言 来判断使用中文还是英文

image-20220712162233742

  • locale类

Locale 表示地区。每一个Locale对象都代表了一个特定的地理、政治和文化地区。

  1. 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 黑夜模式

  1. 建立如图文件夹

image-20220712182614380

  • 基本的引用与多语言配置相似
  • 创建 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文件夹进行修改,从而不使用默认的黑夜模式,可以根据自己的想法来自定义