android 语言设置(4)

来源:未知 责任编辑:责任编辑 发表时间:2013-12-01 14:14 点击:

}    实现模拟了这两个类后,即可正常使用上面提到的转换语系的核心代码了。

 

直接上代码:
view plaincopy to clipboardprint?

private void updateLanguage(Locale locale) { 
    Log.d("ANDROID_LAB", locale.toString()); 
    try { 
        Object objIActMag, objActMagNative; 
        Class clzIActMag = Class.forName("android.app.IActivityManager"); 
        Class clzActMagNative = Class.forName("android.app.ActivityManagerNative"); 
        Method mtdActMagNative$getDefault = clzActMagNative.getDeclaredMethod("getDefault"); 
        // IActivityManager iActMag = ActivityManagerNative.getDefault();  
        objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative); 
        // Configuration config = iActMag.getConfiguration();  
        Method mtdIActMag$getConfiguration = clzIActMag.getDeclaredMethod("getConfiguration"); 
        Configuration config = (Configuration) mtdIActMag$getConfiguration.invoke(objIActMag); 
        config.locale = locale; 
        // iActMag.updateConfiguration(config);  
        // 此处需要声明权限:android.permission.CHANGE_CONFIGURATION  
        // 会重新调用 onCreate();  
        Class[] clzParams = { Configuration.class }; 
        Method mtdIActMag$updateConfiguration = clzIActMag.getDeclaredMethod( 
                "updateConfiguration", clzParams); 
        mtdIActMag$updateConfiguration.invoke(objIActMag, config); 
    } catch (Exception e) { 
        e.printStackTrace(); 
    } 

        private void updateLanguage(Locale locale) {                Log.d("ANDROID_LAB", locale.toString());                try {                        Object objIActMag, objActMagNative;                        Class clzIActMag = Class.forName("android.app.IActivityManager");                        Class clzActMagNative = Class.forName("android.app.ActivityManagerNative");                        Method mtdActMagNative$getDefault = clzActMagNative.getDeclaredMethod("getDefault");                        // IActivityManager iActMag = ActivityManagerNative.getDefault();                        objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);                        // Configuration config = iActMag.getConfiguration();                        Method mtdIActMag$getConfiguration = clzIActMag.getDeclaredMethod("getConfiguration");                        Configuration config = (Configuration) mtdIActMag$getConfiguration.invoke(objIActMag);                        config.locale = locale;                        // iActMag.updateConfiguration(config);                        // 此处需要声明权限:android.permission.CHANGE_CONFIGURATION                        // 会重新调用 onCreate();                        Class[] clzParams = { Configuration.class };                        Method mtdIActMag$updateConfiguration = clzIActMag.getDeclaredMethod(                                        "updateConfiguration", clzParams);                        mtdIActMag$updateConfiguration.invoke(objIActMag, config);                } catch (Exception e) {                        e.printStackTrace();                }        }    实际运行后,发现对当前系统设置了新的Locale后,不单自己的应用语系改变了,系统所有的应用语系都改变了。这肯定是不合理的。有一个解决办法是在应用界面退出前再次对系统设置成碑的Locale,不过个人不喜欢这样的办法,加之调用updateConfiguration()方法后,整个Activity会重新onCreate(),这个考虑Activity的生命周期可有点费劲了。于是有了下面这第三种方法。

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Android 完全退出程序
  • 原创:Android应用开发-Andorid歌词秀,含源码
  • android 屏幕保护
  • Android手机软件汉化教程---第四课 dex文件汉化
  • 众多Android 开源项目推荐,给力工作给力学习
  • Android Audio代码分析4
  • Android得到已安装的应用程序信息!
  • Android开发者指南(29) —— USB Host and Accessory
  • Android成长的幕后推手:工程师鲁宾
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1