我知道已经有很多关于这个话题的问题,但我根本无法让它发挥作用。
我想要实现的目标如下:
无论使用何种语言,Android手机都会启动我的应用程序。从那时起,语言环境被“en”覆盖。当用户关闭应用程序时,语言环境将再次设置为默认值。
我用简单的调试吐司创建了最基本的应用程序。我的手机使用的语言不是“en”,但是在我启动应用程序后,我仍然得到我的默认值而不是值“en”。
我做错了什么?
package com.locale.test;
import java.util.Locale;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.widget.Toast;
public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onResume() {
super.onResume();
Locale locale = null;
Configuration config =null;
config = getBaseContext().getResources().getConfiguration();
locale = Locale.ENGLISH;
Locale.setDefault(locale);
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
/***********************************************************************************************
* Debug
**********************************************************************************************/
@Override
public boolean onSearchRequested() {
String density;
String orientation;
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
if(metrics.densityDpi == DisplayMetrics.DENSITY_HIGH){ density = "HDPI"; } else
if(metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM){ density = "MDPI"; } else
if(metrics.densityDpi == DisplayMetrics.DENSITY_LOW){ density = "LDPI"; } else
{ density = "DEFAULT"; };
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
orientation = "Portrait";
} else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
orientation = "Landscape";
} else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_SQUARE){
orientation = "Square";
} else {
orientation = "Undefined";
}
Toast.makeText(this, "Density = " + density + "\n" +
"Orientation = " + orientation + "\n" +
"Width = " + metrics.widthPixels + "\n" +
"Height = " + metrics.heightPixels + "\n" +
"Locale = " + Locale.getDefault(), Toast.LENGTH_LONG).show();
return super.onSearchRequested();
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.locale.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="4" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:configChanges="locale">
<activity
android:name=".Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
添加了:
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
将语言区域更改为:
locale = Locale.ENGLISH;
答案 0 :(得分:1)
我想您忘了在Resources
对象上致电updateConfiguration()
。
此外,我认为这不重要,但我会使用Locale.ENGLISH
常量。
答案 1 :(得分:1)
我认为你不应该尝试在onResume方法中这样做。我刚刚在onCreate方法中测试了它(在设置布局setContentView(int)之前)并且它运行良好。 此外,它应该可以正常工作,屏幕方向改变。 代码如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Configuration configuration = new Configuration();
configuration.locale = Locale.FRANCE;
getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics());
setContentView(R.layout.main);
}
我在AndroidManifest.xml文件中添加了android:configChanges =“locale”,并在res中创建了值-fr文件夹。