updateConfiguration 的一些使用及修改 系统的 Locale
2011-02-18 17:27
302 查看
由于手机是刷国外的rom,setting中没用中文这个locale选择,然后一直纠结于怎么通过程序修改系统Locale
最近发现 morelocale 2 这个APP可以实现相关功能。
反编译得知,他的核心是通过他自己的包中ActivityManagerNative 这个类实现
又在一个blog 中发现了相关资料
http://jaymsimusic.javaeye.com/blog/781439
原来 android 的源码是有ActivityManagerNative 这个类的,但是在jar包中没有这个class文件,源码里却有对应的.java文件,网上也有人说 直接不管eclipse报编译时异常,最后扔到源码里面用linux编就行了。不
为了解决 更改系统的语言设置 我看到网上有人利用反射来实现的,具体代码如下:
至于只改变程序本身的Locale 而非系统的 可以用下面代码
但同时发现了个问题
如果是用 button 的事件来触发
对于同一activity 中已生成的 目录按钮 不起作用,但对于触发前还没生成的对话框却起作用,是不是在触发后需要刷新下以生成的目录菜单呢?
最近发现 morelocale 2 这个APP可以实现相关功能。
反编译得知,他的核心是通过他自己的包中ActivityManagerNative 这个类实现
又在一个blog 中发现了相关资料
http://jaymsimusic.javaeye.com/blog/781439
原来 android 的源码是有ActivityManagerNative 这个类的,但是在jar包中没有这个class文件,源码里却有对应的.java文件,网上也有人说 直接不管eclipse报编译时异常,最后扔到源码里面用linux编就行了。不
为了解决 更改系统的语言设置 我看到网上有人利用反射来实现的,具体代码如下:
try { Class<?> activityManagerNative = Class.forName("android.app.ActivityManagerNative"); Log.i("amnType", activityManagerNative.toString()); Object am=activityManagerNative.getMethod("getDefault").invoke(activityManagerNative); Log.i("amType", am.getClass().toString()); Object config=am.getClass().getMethod("getConfiguration").invoke(am); Log.i("configType", config.getClass().toString()); config.getClass().getDeclaredField("locale").set(config, Locale.CHINA); config.getClass().getDeclaredField("userSetLocale").setBoolean(config, true); am.getClass().getMethod("updateConfiguration",android.content.res.Configuration.class).invoke(am,config); }catch (Exception e) { e.printStackTrace(); }
至于只改变程序本身的Locale 而非系统的 可以用下面代码
Configuration config=getResources().getConfiguration(); if(!config.locale.equals(Locale.ENGLISH)){ config.locale=Locale.ENGLISH; Toast.makeText(hello.this, "设置为英语", Toast.LENGTH_SHORT).show(); }else{ config.locale=Locale.CHINESE; Toast.makeText(hello.this, "设置为中文", Toast.LENGTH_SHORT).show(); } DisplayMetrics dm=getResources().getDisplayMetrics(); getResources().updateConfiguration(config, dm);
但同时发现了个问题
如果是用 button 的事件来触发
对于同一activity 中已生成的 目录按钮 不起作用,但对于触发前还没生成的对话框却起作用,是不是在触发后需要刷新下以生成的目录菜单呢?
相关文章推荐
- 【转】使用程序修改系统(IE)代理设置
- EF5+MVC4系列(5) 删除的方法 1:系统推荐的先查询后remove删除的方法 2:自己new一个包含主键的类,然后 attach附加 remove删除;3:使用db.Entry 修改状态删除4:EntityState的几种状态
- 在Sql Server 使用系统存储过程sp_rename修改表名或列名
- 近期会议系统一些修改和体会
- Android系统移植与调试之------->如何修改Android手机NFC模块,使黑屏时候能够使用NFC
- 树莓派系统安装和使用的一些心得(多图)
- 警惕黑客使用Lion系统漏洞破解和修改用户登陆密码
- SQL数据库中 一些常使用的约束 排序 系统函数的用法 与联合主键
- MTK平台,当修改一些代码时,使用什么编译命令可以最有效率
- 使用mvvm框架avalon开发公司内部运营管理系统的一些心得
- linux 系统的一些使用小技巧
- 当修改一些代码时,使用什么编译命令可以最有效率
- 使用GetSystemDefaultLangID()和windows宏MAKELANGID通过locale的LANG判断系统语言
- Linux中系统参数修改命令sysctl的使用讲解
- Mac系统下使用genymotion模拟器的一些问题
- 使用SetSysColors 修改系统颜色
- vista忘记用户名密码的修改方法(使用PE进入系统,用cmd.exe冒充虚拟键盘,然后就可以mmc组策略,或者命令行添加用户并提升权限)
- Windouws7 下提示您使用非管理权限登录,无法创建和修改系统DSN的解决方法
- 警惕黑客使用Lion系统漏洞破解和修改用户登陆密码
- Android系统移植与调试之-------)如何修改Android手机NFC模块,使黑屏时候能够使用NFC