Android app內 語言切換

功能:

app用戶根據自己的語言喜好,設置app語言。語言設置只針對本app,並在下次啓動應用時保留前一次啓動設置。


     1.先去查看下
       各國語言縮寫-各國語言簡稱,世界各國域名縮寫
       
       2.在工程res文件下添加對應語種的values文件,ar:阿拉伯語, en:英語    zh_rCN: 簡體中文
       截圖如下:

              
       在strings.xml和arrays.xml需要國際化的字符串進行相應得翻譯


更新語言:

public void chooseLanguage(Locale locale) {

Resources resources = getResources();// 獲得res資源對象

Configuration config = resources.getConfiguration();// 獲得設置對象

DisplayMetrics dm = resources.getDisplayMetrics();// 獲得屏幕參數:主要是分辨率,像素等。

config.locale = locale; 

resources.updateConfiguration(config, dm);

this.finish();// 重啓。

startActivity(new Intent(activity, TranAActivity.class));

}


Locale中已經有定義好的語種相關的Locale:CHINA CHINESE US

像阿拉伯語沒有的話就得   new Locale("ar");


可以再Activity的

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Resources resources = getResources();//獲得res資源對象

Configuration config = resources.getConfiguration();//獲得設置對象

DisplayMetrics dm2 = resources.getDisplayMetrics();//獲得屏幕參數:主要是分辨率,像素等。

config.locale =new Locale("ar"); 

resources.updateConfiguration(config, dm2);

//在setContentView方法之前設置

setContentView(R.layout.activity_tran_main);

}

sharePreferences存入設置語言:

 

 

SharencessharedPreferences = getActivity().getSharedPrefeivity().getPackageName(), 0);

sharedPreferences.edit().putString("language", lanAtr).commit();

語言更新後,對於之前出現且目前仍舊存活的activity,語言設置是不生效的。可以通過重啓對應的activity,讓語言及時生效。

 

private void restart() {

        Intentit = 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()方法即可。

重啓singleTask activity

 

如果你的啓動activitysingleTask,向上面那樣重啓,語言還是不生效的。這種情況如何呢?可以通過了解、利用其生命週期來解決,在切回singleTask屬性的activity時,activity會調用onNewIntent()方法。重寫該方法就可以。以下是一種解決方法,先finish自己,然後重啓自己。

 

 @Override

    protectedvoid onNewIntent(Intent intent) {

        if (intent.getAction() == null) {

            finish();

            Intenti = new Intent(this, MainActivity.class);

            startActivity(i);

            //overridePendingTransition(0, 0);

        } else {

            //其他邏輯

        }

    }

結束語:

 

APP語言設置不復雜,主要是如何將語言設置及時生效,涉及activity重啓,廣播等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章