在安卓开发中,常会遇到需要切换不同语言的情况。语言不同意味着需要进行不同语种字符的动态切换、不同布局的动态切换。
安卓实现这一功能非常的简单:
首先在res中创建其它语种对应的value、layout等文件夹,比如添加英文版和越南版,命名如value-en-US、value-vi、layout-en-US、layout-vi。
命名规则在网上可以查到,value-en-US中,en表示英文,US表示美国。国家可不写。越南版可全写为layout-vi-VN。
如此,便有了几套同名,同id,但内容属性不同多版本布局。
然后,编写代码。
import java.util.Locale;
Locale locale;
String language = Locale.getDefault().getLanguage();
if (language.equals("en")){
...
}
可在切换语言的onclick事件中:
case *:
locale = Locale.ENGLISH;
或者: locale = new Locale("vi", "VN"); //越南
重启改变语言:
private void changeLanguage(Locale locale) {
try {
IActivityManager am = ActivityManagerNative.getDefault();
Configuration config = am.getConfiguration();
config.locale = locale;
config.userSetLocale = true;
am.updateConfiguration(config);
} catch (RemoteException e) { Log.e(TAG, e.toString()); } }
至此代码部分完成。
最后,改变编译部分配置文件,增加语言支持:
/build/target/product目录下,language_full.mk|language_small.mk 看你的编译选项使用那个文件了,修改PRODUCT_LOCALES
在full.mk的文件,这里面有这样的片段:$(call inherit-product, build/target/product/languages_small.mk),后者路径就是我们要设置的地方。
上面是摘自其它博客,
其实在我的编译环境里,在locales_full.mk里加上vi_Vn就可以了。