我想在所有活动中更改语言。是否有任何简单的方法来改变语言而不使用字符串资源。我尝试了类似下面的代码,但没有工作。任何一个帮助我通过简单的方式改变所有活动中的语言?
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView arg0, View arg1,
int arg2, long arg3) {
Configuration config = new Configuration();
switch (arg2) {
case 0:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(LocalizationUpdaterActivity.this);
preferences.edit().putString("lang", "ar").commit();
break;
case 1:
break;
default:
config.locale = Locale.TAIWAN;
break;
}
}
public void onNothingSelected(AdapterView arg0) {
// TODO Auto-generated method stub
}
});
申请代码:
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String lang = preferences.getString("lang", "en");
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}
答案 0 :(得分:0)
基本上你的代码是正确的。
以下代码有效。检查你是否错过了什么。 我猜您的应用程序代码没有执行,或者您的字符串翻译不可用。
工作样本:
<强>应用强>
@Override
public void onCreate() {
super.onCreate();
setResourceLocale(new Locale("en"));
}
private void setResourceLocale(Locale locale){
if(Build.VERSION.SDK_INT >= 17){
getBaseContext().getResources().getConfiguration().setLocale(locale);
}else{
Configuration config = getResources().getConfiguration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,getResources().getDisplayMetrics());
}
}
<强>活动:强>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, getString(android.R.string.no));
}
<强>的AndroidManifest.xml:强>
确保添加了自定义应用程序类!
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:name=".MainApplication"
>
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<强>增加:强>
使用语言和国家代码使用:
new Locale("de","DE")
查看this以获取正确代码的答案。