需要完成的功能是點擊指定按鈕後修改系統語言,並讓應用跟隨系統切換語言
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(); } }
界面更新處理得比較粗糙,還望大神指教!