App用戶根據(jù)自己的語言喜好,設(shè)置app語言币砂。語言設(shè)置只針對(duì)本app救崔,并在下次啟動(dòng)應(yīng)用時(shí)保留前一次啟動(dòng)設(shè)置囤耳。
切換語言代碼:
?
sharePreferences存入設(shè)置語言:
SharencessharedPreferences=getActivity().getSharedPrefeivity().getPackageName(),0);sharedPreferences.edit().putString("language",lanAtr).commit();
語言更新后,對(duì)于之前出現(xiàn)且目前仍舊存活的activity面褐,語言設(shè)置是不生效的拌禾。可以通過重啟對(duì)應(yīng)的activity展哭,讓語言及時(shí)生效
private void restart() { Intent it = new Intent(getActivity(), MainActivity.class); //MainActivity是你想要重啟的activity it.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getActivity().startActivity(it); }
NOTE:
一般湃窍,從用戶體驗(yàn)角度講,語言設(shè)置功能入口會(huì)放在App的前幾層摄杂,如果入口太深坝咐,導(dǎo)致用戶無法快速找到語言設(shè)置入口,并且如果要講應(yīng)用重啟的話析恢,用戶行為操作記錄會(huì)比較麻煩墨坚。
重啟對(duì)應(yīng)Activity有幾種方式:
如果用戶進(jìn)入語言設(shè)置需要太多的層級(jí),或者在操作語言設(shè)置之前操作的其他行為映挂,APP想保存的泽篮,那可以通過廣播的方式(sendBroadcast()),語言改變時(shí)發(fā)送廣播柑船,所有activity接受到廣播后(BroadcastReceiver)帽撑,都進(jìn)行重啟操作;
如果允許用戶設(shè)置語言后鞍时,app回到主目錄亏拉,這樣就簡(jiǎn)單很多,直接調(diào)用上面的restart()方法即可逆巍。
重啟singleTask activity:
如果你的啟動(dòng)activity是singleTask及塘,向上面那樣重啟,語言還是不生效的锐极。這種情況如何呢笙僚?可以通過了解、利用其生命周期來解決灵再,在切回singleTask屬性的activity時(shí)肋层,activity會(huì)調(diào)用onNewIntent()方法亿笤。 重寫該方法就可以。以下是一種解決方法栋猖,先finish自己净薛,然后重啟自己。
@Override
protected void onNewIntent(Intentintent){
if(intent.getAction()==null){
finish();
Intenti=newIntent(this,MainActivity.class);
startActivity(i);// overridePendingTransition(0, 0);
}else{
//其他邏輯
}}
APP語言設(shè)置不復(fù)雜掂铐,主要是如何將語言設(shè)置及時(shí)生效罕拂,涉及activity重啟,廣播等全陨。