android app內切換語言環境

功能: app用戶根據本身的語言喜愛,設置app語言。語言設置只針對本app,並在下次啓動應用時保留前一次啓動設置。 更新語言: <!-- lang: java --> public static void changeAppLanguage(Resources resources, String lanAtr) { Configuration config = resources.getConfiguration(); DisplayMetrics dm = resources.getDisplayMetrics(); if (lanAtr.equals("ru_RU")) { config.locale = new Locale("ru", "RU"); } else if (lanAtr.equals("en_US")) { config.locale = Locale.ENGLISH; } else if (lanAtr.equals("pt")) { config.locale = new Locale("pt"); } else { config.locale = Locale.getDefault(); } resources.updateConfiguration(config, dm); } sharePreferences存入設置語言: <!-- lang: java --> Sharences sharedPreferences = getActivity().getSharedPrefeivity().getPackageName(), 0); sharedPreferences.edit().putString("language", lanAtr).commit(); 語言更新後,對於以前出現且目前仍舊存活的activity,語言設置是不生效的。能夠經過重啓對應的activity,讓語言及時生效。 <!-- lang: java --> 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: 通常,從用戶體驗角度講,語言設置功能入口會放在App的前幾層,若是入口太深,致使用戶沒法快速找到語言設置入口,而且若是要講應用重啓的話,用戶行爲操做記錄會比較麻煩。 重啓對應Activity有幾種方式: 若是用戶進入語言設置須要太多的層級,或者在操做語言設置以前操做的其餘行爲,APP想保存的,那能夠經過廣播的方式(sendBroadcast()),語言改變時發送廣播,全部activity接受到廣播後(BroadcastReceiver),都進行重啓操做; 若是容許用戶設置語言後,app回到主目錄,這樣就簡單不少,直接調用上面的restart()方法便可。java

重啓singleTask activity: 若是你的啓動activity是singleTask,向上面那樣重啓,語言仍是不生效的。這種狀況如何呢?能夠經過了解、利用其生命週期來解決,在切回singleTask屬性的activity時,activity會調用onNewIntent()方法。 重寫該方法就能夠。如下是一種解決方法,先finish本身,而後重啓本身。 <!-- lang: java --> @Override protected void onNewIntent(Intent intent) { if (intent.getAction() == null) { finish(); Intent i = new Intent(this, MainActivity.class); startActivity(i); // overridePendingTransition(0, 0); } else { //其餘邏輯 } } 結束語: APP語言設置不復雜,主要是如何將語言設置及時生效,涉及activity重啓,廣播等。app

相關文章
相關標籤/搜索