文章目录

  • 前置条件
  • 涉及到的关键类
  • 类的使用
    • 1、LocalePicker 的使用
    • 2、LocaleHelper的使用
  • 示例
    • 代码
    • 对应的 locale_test.xml
    • 打印结果

提示:以下是本篇文章正文内容,下面案例可供参考

前置条件

一、需要系统权限,即在 AndroidManifest.xml 中加上 android:sharedUserId="android.uid.system"
二、需要导入 frameword.jar

涉及到的关键类

1、/fameworks/base/core/java/com/android/internal/app/LocaleStore.java
2、/fameworks/base/core/java/com/android/internal/app/LocaleHelper.java
3、/fameworks/base/core/java/com/android/internal/app/LocalePicker.java

类的使用

1、LocalePicker 的使用

a) 获取当前可选择语言列表

LocalePicker.getLocales()

b) 设置使用的语言列表,同时更新系统语言
语言列表设置为一个,

LocalePicker.updateLocale(Locale.CHINESE);

语言列表更新为这个

LocalePicker.updateLocales()

c) 获取所有内置的语言
LocalePicker.getAllAssetLocales()

2、LocaleHelper的使用

a) 获取语言的名称

LocaleHelper.getDisplayName(localeInfo.getLocale(), localeInfo.getLocale(), true))
LocaleHelper.getDisplayName(localeInfo.getLocale(), true)

示例

代码

public class LocaleTestActivity extends Activity {private static final String TAG = "LocaleTestActivity";@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);LocaleTestBinding binding = DataBindingUtil.setContentView(this, R.layout.locale_test);binding.getAllLanguage.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//                LogUtils.d(TAG, Arrays.toString(.toArray(new LocalePicker.LocaleInfo[]{})));LogUtils.d(TAG, "获取所有的语言信息:" + get());LogUtils.d(TAG, "获取列表中的所有语言:" + LocalePicker.getLocales().toString());LogUtils.d(TAG, "获取系统语言信息:" + Arrays.toString(LocalePicker.getSystemAssetLocales()));LogUtils.d(TAG, "获取列表中指定语言所在的位置:" + LocalePicker.getLocales().indexOf(new Locale("zh")));LogUtils.d(TAG,"level__" + Arrays.toString(LocaleStore.getLevelLocales(LocaleTestActivity.this, new HashSet<String>(), null, false).toArray(new LocaleStore.LocaleInfo[]{})));LocalePicker.LocaleInfo localeInfo = LocalePicker.getAllAssetLocales(LocaleTestActivity.this, false).get(1);LocalePicker.updateLocale(localeInfo.getLocale());LogUtils.d(TAG, " 获取语言的名称(对应该语言的) getFullNameNative: " + LocaleHelper.getDisplayName(localeInfo.getLocale(), localeInfo.getLocale(), true));LogUtils.d(TAG, " 获取语言的名称(对应设置语言的) getFullNameInUiLanguage: " + LocaleHelper.getDisplayName(localeInfo.getLocale(), true));}});binding.setChinese.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {LocalePicker.updateLocale(Locale.CHINESE);}});binding.setEnglish.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {LocalePicker.updateLocale(Locale.UK);}});}private String get(){StringBuilder builder = new StringBuilder();for(LocalePicker.LocaleInfo info : LocalePicker.getAllAssetLocales(LocaleTestActivity.this, false)){builder.append("label: " + info.getLabel() + "   locale: " + info.getLocale().toString() + "  tag: " + info.getLocale().toLanguageTag() + "\n");}return builder.toString();}
}

对应的 locale_test.xml

 <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><data></data><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/get_all_language"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="获取设置的所有语言"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.019"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.038" /><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/set_chinese"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="设置为中文"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="@+id/get_all_language"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="@+id/get_all_language"app:layout_constraintTop_toBottomOf="@+id/set_english"app:layout_constraintVertical_bias="0.065" /><androidx.appcompat.widget.AppCompatButtonandroid:id="@+id/set_english"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="设置为英文"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="@+id/get_all_language"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="@+id/get_all_language"app:layout_constraintTop_toBottomOf="@+id/get_all_language"app:layout_constraintVertical_bias="0.042" /></androidx.constraintlayout.widget.ConstraintLayout>
</layout>

打印结果

android 语言的设置与获取相关推荐

  1. Android 语言环境设置Locale的设置

    原创文章,如有转载,请注明出处:http://blog.csdn.net/myth13141314/article/details/70224168 开发过程中需要将App的语言环境设置为英语,记录如 ...

  2. Android应用内设置多语言,可随系统语言改变而改变,也可设置app为固定语言不受系统语言影响

    转载请标明出处: https://blog.csdn.net/m0_38074457/article/details/84993366,本文出自:[陈少华的博客] 一.效果图 https://gith ...

  3. Android应用内设置多语言

    1.项目简介 最近项目中要加入多语言需求,涉及到的有中文简体,中文繁体,英语,西班牙语,泰语,印尼语,葡萄牙语.参考了Android应用内设置多语言,可随系统语言改变而改变,在此基础上做了修改,选择为 ...

  4. R语言attributes函数(获取属性、设置属性)、attr函数(改变一个属性)、structure函数(改变数据形状)实战

    R语言attributes函数(获取属性.设置属性).attr函数(改变一个属性).structure函数(改变数据形状)实战 目录

  5. 【Android FFMPEG 开发】FFMPEG 获取编解码器 ( 获取编解码参数 | 查找编解码器 | 获取编解码器上下文 | 设置上下文参数 | 打开编解码器 )

    文章目录 博客简介 . FFMPEG 编解码器获取流程 I . FFMPEG 获取音视频流的编解码参数 AVCodecParameters *codecpar II . FFMPEG 查找解码器 av ...

  6. Android系统语言默认设置为简体中文

       Android系统默认的语言是英语,但是对于中国大陆Android产品厂商来说,不会出厂之后语言还是英语,到用户手里之后,用户自己设置成简体中文吧?有如果客户不懂英语,岂不是就不能设置系统语言了 ...

  7. 海康机器人工业相机常用参数功能设置与获取(持续更新全-C语言)

    海康机器人工业相机常用参数功能设置与获取(C语言) 前言 相机属性树 1.设备控制/DeviceControl 1.1相机序列号获取/DeviceSerialNumber 1.2相机自定义命名设置与获 ...

  8. Android屏幕待机时间的获取和设置

    博客源址: Android屏幕待机时间的获取和设置 应用场景:紧接的是Adnroid屏幕亮度调节--设置到指定的值与恢复到原来的值这一篇的应用场景,条形码图片扫码的问题.屏幕待机时间太短,正在扫着突然 ...

  9. android语言列表+波斯,Android 多语言入门及实战

    右键res,选择 New Resource Directory ,选择 locale ,选择自己想要适配的语言类型 设置应用内多语言 Android 7.0以下 /** * 设置多语言 */ publ ...

最新文章

  1. java字符存储_用java的类集框架做一个字符存储器(15)
  2. 25个别出心裁的简历设计作品欣赏
  3. [Android]为指定的应用创建桌面快捷方式
  4. 一个亿的融资在一家芯片初创公司可以烧多久?
  5. 【AtCoder】AGC017
  6. 华为手机设置页面黑色_华为手机里最危险的设置,学会这一招,手机还能再战三年...
  7. 服务器客户端对话java_java中的服务器和客户机如何使用
  8. 敏捷开发系列学习总结(16)——给Scrum Master的十个建议
  9. linux startx无法启动
  10. 编写python代码估算sin(x)的值
  11. 2. mac mysql error
  12. paip.提升安全性----Des加密 java php python的实现总结
  13. 计算机网络技术基础第二章答案,计算机网络技术基础各章节综合练习题及答案...
  14. 实物补贴和货币补贴的权衡
  15. kafka内存缓冲池机制造成的频繁GC问题
  16. 串口、COM口、UART口, TTL、RS-232、RS-485的区别
  17. linux 动态扫描 数码管,七段数码管动态扫描原理及其实现方法
  18. 大三寒假实习了半个月很困惑
  19. RandomAccessFile类 随机流
  20. 暴力破解Windows、Linux登录密码

热门文章

  1. 周爱民先生力作《Delphi源代码分析》持续好评热卖中!!
  2. 高速PCB损耗性能的影响分析
  3. CSP 202206-1 归一化处理
  4. [随笔]openpyxl的安装
  5. 手机页面出现乱码几种可能
  6. quartz(一):quartz简介及使用
  7. 1202 -- 童年生活二三事
  8. 白话——海明校验码及编码过程
  9. 数值最优化-KKT条件(一阶必要条件)证明总结
  10. 产品经理有没有考PMP的必要?过来人告诉你