Android 应用语言设置的实现

android每个应用都保存着一份仅对自身有用的配置,被封装在 android.content.res.Configuration 类里,通过该类,我们可以修改语言参数,实现对应用语言的变更。

首先获取 Configuration 对象:

 

Java代码 复制代码  收藏代码
  1. Resources resource = getResources();   
  2. Configuration config = resource.getConfiguration();    
Resources resource = getResources();
Configuration config = resource.getConfiguration();  

 

然后设置 config 中的 locale 属性,选择需要的语言。

locale属性为一个Locale类的对象,比如我们要设置应用的语言为英语,那么可以这样实现:

 

Java代码 复制代码  收藏代码
  1. config.locale = Locale.ENGLISH;  
config.locale = Locale.ENGLISH;

 

  或者要设置成系统默认的语言:

Java代码 复制代码  收藏代码
  1. config.locale = Locale.getDefault();   
config.locale = Locale.getDefault(); 

最后,需要更新配置文件,执行下面的代码:

 

Java代码 复制代码  收藏代码
  1. getBaseContext().getResources().updateConfiguration(config, null);  
getBaseContext().getResources().updateConfiguration(config, null);

 


语言设置完成后,应用并不会自动刷新当前已经打开的Activity,所以为了刷新整个应用,目前比较通用的做法是重新启动应用:

 

Java代码 复制代码  收藏代码
  1. Intent intent = new Intent();   
  2. intent.setClass(this, MainActivity.class);   
  3. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   
  4. this.startActivity(intent);  
Intent intent = new Intent();
intent.setClass(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
this.startActivity(intent);

 

 

另外需要注意的是,需要在Manifest.xml文件中的Activity中配置android:configChanges属性,通过配置该属性,Activity可以捕捉设备状态的变化:

 

Xml代码 复制代码  收藏代码
  1. <activity  
  2.             android:name=".MainActivity"  
  3.             android:label="@string/title_activity_main"  
  4.             android:configChanges="locale" >  
  5.             <intent-filter>  
  6.                 <action android:name="android.intent.action.MAIN" />  
  7.                 <category android:name="android.intent.category.LAUNCHER" />  
  8.             </intent-filter>  
  9. </activity>  

 

 

具体的实现请参考Demo: LanguageChangeDemo

下载地址:https://github.com/hanyi/LocaleChangeDemo.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值