一.Android多语言切换
Android应用的开发不可能仅仅针对某一个国家或者区域使用,各国间语言文化各不同样,因此一个优秀的APP必须支持多种语言,为了实现这个特性,Android给出了一个解决方案,在res文件夹下通过values+语言编码来实现多国语言的支持(中间採用连字符号-连接)。比如:values-es代表英文,假设你决定了你的应用要支持多国语言。那么你就必须新建多种values-XXX的多语言支持文件,以下通过一个样例来看看主要的使用方式,先看下效果图:
1.project结构
注:主要看下res/values-en/strings.xml代表英文字符串资源文件,res/values-zh/strings.xml代表中文.
res/values-en/strings.xml
SwitchLanguage
This is an instance of Android
Switch Language
English
Chinese
Jump to Next Activity
The language of the page has changed, too.
You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.
res/values-zh/strings.xml
切换语言
这是一个Android实例
切换语言
英语
中文
跳转到还有一个页面
这个页面语言也发生了变化
你不能改变你的过去。但你能够让你的未来变得更美好。一旦时间浪费了,生命就浪费了。
2.代码实现
BaseActivity.java
public class BaseActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// 初始化PreferenceUtil
PreferenceUtil.init(this);
// 依据上次的语言设置,又一次设置语言
switchLanguage(PreferenceUtil.getString("language", "zh"));
}
/**
*
*
*
*@param language
*@see [类、类#方法、类#成员]
*/
protected void switchLanguage(String language)
{
// 设置应用语言类型
Resources resources = getResources();
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources.getDisplayMetrics();
if (language.equals("en"))
{
config.locale = Locale.ENGLISH;
}
else
{
// 中文简体
config.locale = Locale.SIMPLIFIED_CHINESE;
}
resources.updateConfiguration(config, dm);
// 保存设置语言的类型
PreferenceUtil.commitString("language", language);
}
}
2、 MainActivity.java
public class MainActivity extends BaseActivity implements OnClickListener{
private Dialog mDialog;
private TextView textShow;
private Button button;
private Button button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.text);
button = (Button) findViewById(R.id.btn);
button2 = (Button) findViewById(R.id.btn_2);
textShow = (TextView)findViewById(R.id.text_show);
textView.setText(R.string.hello_world);
button.setText(R.string.switch_language);
//监听切换语言按钮,弹出dialog选择语言
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mDialog == null) {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.dialog_select_lanuage,null);
TextView english = (TextView) layout.findViewById(R.id.select_english);
TextView chinese = (TextView) layout.findViewById(R.id.select_chinese);
mDialog = new Dialog(MainActivity.this, R.style.Custom_Dialog_Theme);
mDialog.setCanceledOnTouchOutside(false);
english.setOnClickListener(MainActivity.this);
chinese.setOnClickListener(MainActivity.this);
mDialog.setContentView(layout);
}
mDialog.show();
}
});
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent it = new Intent(MainActivity.this, SecondActivity.class);
startActivity(it);
}
});
}
@Override
public void onClick(View v) {
mDialog.dismiss();
switch (v.getId()) {
case R.id.select_english:
//切换为英文
switchLanguage("en");
break;
case R.id.select_chinese:
//切换为中文
switchLanguage("zh");
break;
default:
break;
}
//更新语言后。destroy当前页面,又一次绘制
finish();
Intent it = new Intent(MainActivity.this, MainActivity.class);
startActivity(it);
}
}
activity_main.xml
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="@string/hello_world" />
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/text"
android:layout_centerHorizontal="true"
android:layout_marginTop="15dp"
android:text="@string/switch_language" />
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btn"
android:layout_centerHorizontal="true"
android:layout_marginTop="15dp"
android:text="@string/jump" />
android:id="@+id/text_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerInParent="true"
android:textSize="18sp"
android:text="@string/showtext" />
3、 工具类PreferenceUtil.java
public class PreferenceUtil {
private static SharedPreferences mSharedPreferences = null;
private static Editor mEditor = null;
public static void init(Context context){
if (null == mSharedPreferences) {
mSharedPreferences = android.preference.PreferenceManager.getDefaultSharedPreferences(context) ;
}
}
public static void removeKey(String key){
mEditor = mSharedPreferences.edit();
mEditor.remove(key);
mEditor.commit();
}
public static void removeAll(){
mEditor = mSharedPreferences.edit();
mEditor.clear();
mEditor.commit();
}
public static void commitString(String key, String value){
mEditor = mSharedPreferences.edit();
mEditor.putString(key, value);
mEditor.commit();
}
public static String getString(String key, String faillValue){
return mSharedPreferences.getString(key, faillValue);
}
public static void commitInt(String key, int value){
mEditor = mSharedPreferences.edit();
mEditor.putInt(key, value);
mEditor.commit();
}
public static int getInt(String key, int failValue){
return mSharedPreferences.getInt(key, failValue);
}
public static void commitLong(String key, long value){
mEditor = mSharedPreferences.edit();
mEditor.putLong(key, value);
mEditor.commit();
}
public static long getLong(String key, long failValue) {
return mSharedPreferences.getLong(key, failValue);
}
public static void commitBoolean(String key, boolean value){
mEditor = mSharedPreferences.edit();
mEditor.putBoolean(key, value);
mEditor.commit();
}
public static Boolean getBoolean(String key, boolean failValue){
return mSharedPreferences.getBoolean(key, failValue);
}
}
4、 SecondActivity.java是要跳转的Activity,比較简单,仅仅有一个TextView用来显示文本,语言切换。文本语言也随之切换。
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}
activity_second.xml
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="@string/change" />
样例比較简单,关键代码都有凝视,有问题欢迎留言讨论,共同学习。