2016-07-26 62 views
0

我正在嘗試製作一個示例應用程序,僅在語言環境更改上執行操作。我已經實施了ConfigurationChanged(...),並希望僅在Locale更改時將用戶重定向到其他Activity。偵聽Locale更改的Activity還偵聽方向更改(我在清單中完成的)。Android - 區分配置更改

我的問題是,有沒有什麼辦法來區分兩種配置更改?

活性宣佈在清單中,像這樣:

<activity android:name=".views.MainActivity" 
       android:configChanges="layoutDirection|locale|orientation|screenSize"/> 

而且onConfigurationChange(..)方法是像這樣:

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 

     // should execute only on locale change 
     Intent intent = new Intent(this, SecondActivity.class); 
     startActivity(intent); 
    } 

回答

2

您可以節省您的區域在SharedPreferences和比較在onConfigurationChanged方法中,如果語言環境已更改。通過存儲在的onCreate以前的語言環境的引用(第一次之前的任何區域轉變活動負載發生)

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    SharedPreferences prefs = getSharedPreferences(
    "yourapp", Context.MODE_PRIVATE); 
    prefs.getString("locale", "DEFAULT"); 

    //newConfig.locale is deprecated since API lvl 24, you can also use newConfig.getLocales().get(0) 
    if(!locale.equalsIgnoreCase(newConfig.locale.toLanguageTag()) { 
     // should execute only on locale change 
     SharedPreferences settings = getSharedPreferences("yourapp", MODE_PRIVATE); 
     SharedPreferences.Editor prefEditor = settings.edit(); 
     prefEditor.putString("locale", newConfig.locale.toLanguageTag()); 
     prefEditor.commit(); 
     Intent intent = new Intent(this, SecondActivity.class); 
     startActivity(intent); 
    } 
} 
+0

不錯,你能避免使用SharedPreferences,然後比較兩個:

使用方法如下語言環境。 – user1841702

+0

當然,這使得它變得更加簡單。沒有想到,但我很高興我可以幫助:) – babadaba