安卓开发 切换应用语言和获取系统语言

来源:互联网 发布:suse linux 安装软件 编辑:程序博客网 时间:2024/04/29 04:20

api中提供了locale 类,实现本地化

Locale类 http://www.android-doc.com/reference/java/util/Locale.html
Configuration类 http://www.android-doc.com/reference/android/content/res/Configuration.html

思路:

(app中设置语言的的时候,用SharedPreferences保存在本地一份,用来每次进入判断上次设置了什么语言,知道什么语言了,再用下面的代码设置下)
1.把app干掉,然后重新启动,,,进入的时候 用代码设置下,就切换了
例如:

  System.exit(0);(少用)  Intent i = getBaseContext().getPackageManager().        getLaunchIntentForPackage(getBaseContext().getPackageName());  i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  startActivity(i);

当然没有这么做的了。
2.重新加载边布局:用下面的代码设置完,再调用重新设置(就是把textview重新设置值了)的方法,语言就切换了。
例如:
这里写图片描述

代码

 isEnglish:isEnglish            true  :点击英文            false :点击中文 /**  * Locale类   http://www.android-doc.com/reference/java/util/Locale.html  * Configuration类  http://www.android-doc.com/reference/android/content/res/Configuration.html */        Configuration config = getResources().getConfiguration();        DisplayMetrics dm = getResources().getDisplayMetrics();        if(isEnglish){            //设置英文            config.locale = Locale.ENGLISH;        }else{            //设置中文            config.locale = Locale.SIMPLIFIED_CHINESE;        }        //更新配置        getResources().updateConfiguration(config, dm);

在工程res文件下添加对应语种的values文件

res:
这里写图片描述
把相对应的strings.xml做好翻译就ok了,

AndroidManifest.xml中:

  • 所需权限
 <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
  • 每一个Activity中都要加: android:configChanges="locale"
    系统设置(手机系统设置不是自己写的设置)中切换语言他会重启~
    并且会调用Activity重写的onConfigurationChanged函数
 @Override    public void onConfigurationChanged(Configuration newConfig) {        super.onConfigurationChanged(newConfig);        Log.e("Mylog","onConfigurationChanged");    }

但是有一种情况不会调用onConfigurationChanged函数:
原因是,4.2增加了一个layoutDirection属性,当改变语言设置后,该属性也会成newConfig中的一个mask位。所以ActivityManagerService(实际在ActivityStack)在决定是否重启Activity的时候总是判断为重启。当在android:configChanges 中同时添加locale和layoutDirection时,才会发生app期望的事情。

android:configChanges="locale|layoutDirection"  

demo下载地址:http://download.csdn.net/detail/u013870523/9551033

获取系统语言

获取系统语言 方法:Locale.getDefault().getLanguage()
获取应用语言 方法:getResources().getConfiguration().locale.getLanguage()

推荐
……………………………………………………………………………………………………………………
Android 6.0+ 运行时权限探索
……………………………………………………………………………………………………………………
Android 切换系统语言功能实现
……………………………………………………………………………………………………………………
引用:android:configChanges locale 改语言后,该配置不起作用的原因
……………………………………………………………………………………………………………………
各国语言缩写-各国语言简称,世界各国域名缩写
……………………………………………………………………………………………………………………

有时间最好自己手写写试试,希望能帮到你。

0 0