App用戶根據(jù)自己的語(yǔ)言喜好,設(shè)置app語(yǔ)言。語(yǔ)言設(shè)置只針對(duì)本app,并在下次啟動(dòng)應(yīng)用時(shí)保留前一次啟動(dòng)設(shè)置。
切換語(yǔ)言代碼:
?
sharePreferences存入設(shè)置語(yǔ)言:
SharencessharedPreferences=getActivity().getSharedPrefeivity().getPackageName(),0);sharedPreferences.edit().putString("language",lanAtr).commit();
語(yǔ)言更新后,對(duì)于之前出現(xiàn)且目前仍舊存活的activity,語(yǔ)言設(shè)置是不生效的。可以通過(guò)重啟對(duì)應(yīng)的activity,讓語(yǔ)言及時(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)角度講,語(yǔ)言設(shè)置功能入口會(huì)放在App的前幾層,如果入口太深,導(dǎo)致用戶無(wú)法快速找到語(yǔ)言設(shè)置入口,并且如果要講應(yīng)用重啟的話,用戶行為操作記錄會(huì)比較麻煩。
重啟對(duì)應(yīng)Activity有幾種方式:
如果用戶進(jìn)入語(yǔ)言設(shè)置需要太多的層級(jí),或者在操作語(yǔ)言設(shè)置之前操作的其他行為,APP想保存的,那可以通過(guò)廣播的方式(sendBroadcast()),語(yǔ)言改變時(shí)發(fā)送廣播,所有activity接受到廣播后(BroadcastReceiver),都進(jìn)行重啟操作;
如果允許用戶設(shè)置語(yǔ)言后,app回到主目錄,這樣就簡(jiǎn)單很多,直接調(diào)用上面的restart()方法即可。
重啟singleTask activity:
如果你的啟動(dòng)activity是singleTask,向上面那樣重啟,語(yǔ)言還是不生效的。這種情況如何呢?可以通過(guò)了解、利用其生命周期來(lái)解決,在切回singleTask屬性的activity時(shí),activity會(huì)調(diào)用onNewIntent()方法。 重寫該方法就可以。以下是一種解決方法,先f(wàn)inish自己,然后重啟自己。
@Override
protected void onNewIntent(Intentintent){
if(intent.getAction()==null){
finish();
Intenti=newIntent(this,MainActivity.class);
startActivity(i);// overridePendingTransition(0, 0);
}else{
//其他邏輯
}}
APP語(yǔ)言設(shè)置不復(fù)雜,主要是如何將語(yǔ)言設(shè)置及時(shí)生效,涉及activity重啟,廣播等。