Я знаю, что по этой теме уже есть несколько вопросов, но я просто не могу заставить ее работать.
Чего я хочу добиться, так это:
Телефон 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();
}
}
Manifest:
<?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>
Обновление от 19 января 2012 года:
Добавлено:
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Изменен язык:
locale = Locale.ENGLISH;