Android 判斷當前系統語言

丿灬安之若死發表於2017-11-02

正文

列:zh_CN (1)方法1得到zh (2)方法2得到cn (3)方法3得到zh_CN

方法1:
import java.util.Locale;
String locale = Locale.getDefault().getLanguage();
方法2:
import android.content.res.Configuration;
import android.content.res.Resources;
Resources res = mContext.getResources();
Configuration config = res.getConfiguration();
String locale = config.locale.getCountry();
方法3:
import java.util.Locale;

String locale = Locale.getDefault().toString();

android每個應用都儲存著一份僅對自身有用的配置,被封裝在 android.content.res.Configuration 類裡,通過該類,我們可以修改語言引數,實現對應用語言的變更。

首先獲取 Configuration 物件:

 

Java程式碼  收藏程式碼
  1. Resources resource = getResources();  
  2. Configuration config = resource.getConfiguration();    

 

然後設定 config 中的 locale 屬性,選擇需要的語言。

locale屬性為一個Locale類的物件,比如我們要設定應用的語言為英語,那麼可以這樣實現:

 

Java程式碼  收藏程式碼
  1. config.locale = Locale.ENGLISH;  

 

  或者要設定成系統預設的語言:

Java程式碼  收藏程式碼
  1. config.locale = Locale.getDefault();   

最後,需要更新配置檔案,執行下面的程式碼:

 

Java程式碼  收藏程式碼
  1. 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);  

 

 

另外需要注意的是,需要在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

相關文章