您的位置:首页 > 运维架构 > Linux

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编就行了。不

为了解决 更改系统的语言设置  我看到网上有人利用反射来实现的,具体代码如下: 

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 中已生成的 目录按钮 不起作用,但对于触发前还没生成的对话框却起作用,是不是在触发后需要刷新下以生成的目录菜单呢?

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐