updateConfiguration 的一些使用及修改 系统的 Locale

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

 

你可能感兴趣的:(Android)