Android App 應(yīng)用內(nèi)多語(yǔ)言切換

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{

//其他邏輯

}}

結(jié)束語(yǔ):

APP語(yǔ)言設(shè)置不復(fù)雜,主要是如何將語(yǔ)言設(shè)置及時(shí)生效,涉及activity重啟,廣播等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容