Android切換系統語言,自動更新應用界面顯示語言

需要完成的功能是點擊指定按鈕後修改系統語言,並讓應用跟隨系統切換語言

	private void switchLanguage(){
		
		IActivityManager am = ActivityManagerNative.getDefault();
		
		Configuration config = null ;
		try {
			config = am.getConfiguration();
			//更改系統語言
			if (config.locale.equals(Locale.SIMPLIFIED_CHINESE)) {
				config.locale = Locale.ENGLISH;
			}else {
				config.locale = Locale.SIMPLIFIED_CHINESE;
			}
			//更新系統設置
			am.updateConfiguration(config);
//			BackupManager.dataChanged("com.android.providers.settings");
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		System.out.println(config.locale);
//		updateUI();
	}

添加權限

<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />

上面的方法已經完成了修改系統的語言,打開系統設置界面

adb shell am start -n com.android.settings/.Settings

可以發現設置界面的語言已經跟隨系統更改了,如果要當前應用更改語言顯示還需要一些步驟

在Activity的屬性中添加

android:configChanges="locale"

網上很多文章的做法都到此爲止,筆者到此步並不能自動更新界面語言,原因是界面未更新

爲應用添加一個更新界面的操作,在更改系統語言後更新界面,最初測試發現可以切換界面語言。進一步測試發現,應用界面的語言與系統當前的語言相反,也就是慢一拍,就我上面的例子說,當系統語言爲中文是,我的應用顯示英文;系統語言爲英文時,我的應用顯示的中文。

到系統設置中更改系統語言時發現,選擇語言後大概2s後,界面纔會更新


猜測應該使用廣播,查找一下發現有資料介紹

於是註冊廣播

<receiver android:name="com.coship.entropic.factorytest.receiver.MyBroadcastReceiver">
     <intent-filter>
          <action android:name="android.intent.action.LOCALE_CHANGED" />
     </intent-filter>
</receiver>
	    public static MainActivity activity = null;//在MainActivity初始化傳遞應用過來
	
	    @Override
	    public void onReceive(Context context, Intent intent) {
	        if (intent.getAction().equals(Intent.ACTION_LOCALE_CHANGED)){ 
	            activity.initView();
	        }
	 
	    }

界面更新處理得比較粗糙,還望大神指教!

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