系统设置 设置中英文切换

方式一:直接调用系统类和方法

1,查看com.android.setting源码中,对中英文切换的大概流程,可以总结为:
try {//tw addIActivityManager iActivityManager = ActivityManagerNative.getDefault();Configuration configuration = iActivityManager.getConfiguration();configuration.locale = locale;configuration.userSetLocale = true;iActivityManager.updateConfiguration(configuration);//提交到系统数据存储,需要在应用声明,不需要//BackupManager.dataChanged("com.android.providers.settings");}catch (Exception e){XLog.i("updateLocale fail!.....", e);}

这些类和方法都是只有系统应用才能访问,在标准sdk中是无法访问到的。可以通过系统提供的jar包 framework-base_2.jar

为了AndroidStudio能够编译并找到这些类,gradle中加入这些配置:
allprojects {repositories {jcenter()}gradle.projectsEvaluated {tasks.withType(JavaCompile) {options.compilerArgs.add('-Xbootclasspath/p:userlib/framework-base_2.jar')}}
}

然后加入作为外部引用的jar包:

dependencies {provided files('../userlib/framework-base_2.jar')
}

但是为了在编译过程中能够通过,并且优先选择系统里面的class文件,需要 app.iml 中找到

<orderEntry type="library" exported="" name="framework-base_2" level="project" />
<orderEntry type="jdk" jdkName="Android API 19 Platform" jdkType="Android SDK" />

将系统更jar放到 Android API前面,调用系统jar的有点在于方便,前提是,jar包中提供的类和方法必须在你机器系统中能够找到。

方法二:通过反射设置中英文切换

反射调用的流程大致与上面相同,只不过写起来和看起来复杂一点:
try {Object objIActMag, objActMagNative;Class clzIActMag = Class.forName("android.app.IActivityManager");Class clzActMagNative = Class.forName("android.app.ActivityManagerNative");Method mtdActMagNative$getDefault = clzActMagNative.getDeclaredMethod("getDefault");objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);Method mtdIActMag$getConfiguration = clzIActMag.getDeclaredMethod("getConfiguration");Configuration config = (Configuration) mtdIActMag$getConfiguration.invoke(objIActMag);// set the locale to the new valueconfig.locale = locale;//持久化  config.userSetLocale = true;Class clzConfig = Class.forName("android.content.res.Configuration");java.lang.reflect.Field userSetLocale = clzConfig.getField("userSetLocale");userSetLocale.set(config, true);// 此处需要声明权限:android.permission.CHANGE_CONFIGURATION// 会重新调用 onCreate();Class[] clzParams = { Configuration.class };Method mtdIActMag$updateConfiguration = clzIActMag.getDeclaredMethod("updateConfiguration", clzParams);mtdIActMag$updateConfiguration.invoke(objIActMag, config);BackupManager.dataChanged("com.android.providers.settings");} catch (Exception e) {XLog.e("updateLocale fail!", e);}

以上是基于代码实现的设置中英文切换,实际操作过程中遇到,系统设置设置完中英文后,按主页键进入launcher,launcher一直无响应,网上分析的原因是,设置中英文以后,会导致launcher 执行 onstop -> ondestroy ,然后重新 oncreate然后,按主页键时,从后台切到前台,launcher很长一段时间无响应。

解决方法,需要在清单文件对Activity设置 configChanges 属性,然后再Activity 中重新在onConfigurationChanged中重写更新ui
<activityandroid:name="com.inspur.livetv.weblauncher.Main"android:configChanges="layoutDirection|locale"android:clearTaskOnLaunch="true"android:label="@string/app_name"android:launchMode="singleTask"android:screenOrientation="nosensor" >
  @Overridepublic void onConfigurationChanged(Configuration newConfig) {super.onConfigurationChanged(newConfig);XLog.d("[Main.onConfigurationChanged] !");updateTextUI();}

至此,中英文问题已经解决。

系统设置中 语言设置,中文或者英文相关推荐

  1. 设置Jenkins语言为中文或英文

    文章目录 设置Jenkins语言为中文或英文 中文转English English转简体中文 设置Jenkins语言为中文或英文 通过安装locale 插件可以在不修改服务器配置的情况下,修改Jenk ...

  2. CentOS6.5--修改系统语言为中文或英文,文件夹切换语言

    一.修改系统语言为中文或英文 第一步: 非常重要:由当前位置切换到root 命令:su root 第二步: 命令:vim /etc/sysconfig/i18n 敲回车之后会看到文件中显示: LANG ...

  3. windows server 2012 r2 切换语言为中文、英文,下载安装多语言安装包

    windows server 2012 r2 切换语言为中文.英文,下载安装多语言安装包 下载地址:https://pan.baidu.com/s/19P75HJ1KGbxIYKeUIeqG_w  提 ...

  4. origin9语言设置中文_英雄联盟手游怎么设置繁体 LOL手游繁中设置方法?_英雄联盟手游...

    英雄联盟手游终于在海外部分地区上线了,不过玩海外服有一点不好,就是界面都是外文,比如英文.日文.韩文等等.那么英雄联盟手游怎么设置繁体中文呢,这里就来给大家介绍一下LOL手游繁中设置方法,将游戏语言切 ...

  5. 双y轴图中怎么设置中文字体为仿宋_GB2312,英文字体为Times New Roman

    如果您使用的是 Matplotlib 库,可以使用以下代码设置双 y 轴图中的字体: import matplotlib.pyplot as pltfrom matplotlib.font_manag ...

  6. Android Studio模拟器如何把语言设置为中文和设置中文输入法

    文章目录 Android Studio模拟器语言设置为中文 Android Studio模拟器设置中文输入法 Android Studio模拟器安装搜狗输入法 下载搜狗输入法x86的输入法APK 安装 ...

  7. origin9语言设置中文_Kali设置中文

    kali安装的时候选择了英文安装,后面安装完成后进入kali,系统设置调节好了中文语言之后,系统设置还是显示英文,初加推断应该是中文字体的问题. 0x01 安装中文字体 apt install ttf ...

  8. css样式中如何设置中文字体?

    代码如下: .selector{ font-family: SimHei,"微软雅黑",sans-serif; }  注意:加上中文名"微软雅黑"是为了兼容op ...

  9. origin9语言设置中文_《英雄联盟手游》界面翻译图 LOL手游界面设置全翻译图一览...

    导读 英雄联盟手游开始抢先测试,虽然很遗憾没有抢到初始测试的资格,不过下载其他的不同服务器来玩,这样语言就会成为一些麻烦,而且目前无法修改中文设置,虽然对于老玩家来说,大概能懂什么意思,但是有中文更好 ...

  10. go 验证字符串中是否包含中文或英文

    Go 验证字符串中是否包含中文(推荐) _ [IIS7站长之家] golang判断字符是不是字母-Golang-PHP中文网 基础知识 - Golang 中的正则表达式 - GoLove - 博客园 ...

最新文章

  1. WSUS3.0的部署及安装
  2. 小工匠聊架构 - 分布式缓存技术
  3. Python中的split,rsplit,splitlines
  4. Boost:无序的bimap双图的测试程序
  5. 高效大数乘法 c语言,华为2012校园招聘上机题——大数相乘,两个超过100位的大数相乘C语言...
  6. JavaFX 2 GameTutorial第4部分
  7. java ews_Java---使用EWS 写个ExchangeMailUtil
  8. Silverlight MMORPG网页游戏开发课程[一期] 第九课:HUD与背景音乐
  9. Java线程通信之等待/通知
  10. IDC机房对接阿里云
  11. 万字长文!剖析美团外卖持续交付的前世今生
  12. 基础练习: 使用openssl命令创建RSA密钥
  13. CTO:不要在代码中写 set/get 方法了,逮一次罚款...
  14. net.java.html.boot.BrowserBuilder
  15. GsonFormatPlus转变回GsonFormat办法
  16. svn admin 详细介绍
  17. docker搭建aria2离线下载,rclone自动上传
  18. latex模板中 引入ORCID链接的方法
  19. 推荐一款不错的杀毒软件,还在找卡巴激活码的网友不妨进来看看!
  20. 轻量级神经网络架构综述

热门文章

  1. 关于_CRT_SECURE_NO_WARNINGS与_CRT_SECURE_NO_DEPRECATE
  2. 苹果手机怎么打开压缩文件_wx无法打开压缩文件的2种解决方法(以苹果手机为例)...
  3. 压缩包文件的密码如何破解
  4. 基于Canvas+React的高性能Table表格
  5. Problem F - Football Free Kick(数组1e9的插入和删除)
  6. Qt和PyQt中的组合键输入捕获处理
  7. 使用pynput监听键盘组合键
  8. php5.5.12 yar,[原]PHP-yar拓展源码解读五-server篇
  9. 约分最简分式 (15 分)
  10. JAVA7-6 约分最简分式 (15 分)