Android资源文件实现国际化多语言设置+App内切换语言(简)[1]
本文通过介绍在Android系统中,如何添加多语言文件,并通过config类修改应用系统语言,某些步骤过于简单,可跳过
1、添加语言文件
2、自定义语言操作类
3、简单视图层
-
添加语言资源文件
在res下value文件中新建“new>Values resource file”
在新的资源文件中添加对应字符
-
新建语言操作类(LanguageUtilsActivity),在LanguageUtilsActivity中(1)语言切换;(2)记住语言偏好设置;(3)内部类PreferenceUtil,简单操作SharedPreferences。代码如下:
public class LanguageUtilsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//初始化PreferenceUtil
PreferenceUtil.init(this);
//根据上次的语言设置,重新设置语言
switchLanguage(PreferenceUtil.getString("language", "en"));
}
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);
}
public static class PreferenceUtil{
protected static SharedPreferences mSharedPreferences=null;
private static SharedPreferences.Editor mEditor = null;
public static void init(Context context){
if (null == mSharedPreferences) {
mSharedPreferences = android.preference.PreferenceManager.getDefaultSharedPreferences(context) ;
}
}
public static String getString(String key, String faillValue){
return mSharedPreferences.getString(key, faillValue);
}
public static void commitString(String key, String value){
mEditor = mSharedPreferences.edit();
mEditor.putString(key, value);
mEditor.commit();
}
}
}
3.新建MainActivity和Layout, 表现层:视图+事件处理
MainActivity中的事件监听和处理代码如下:
public class MainActivity extends LanguageUtilsActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_en).setOnClickListener(this);
findViewById(R.id.btn_zh).setOnClickListener(this);
}
@Override
public void onClick(View view) {
Log.i("in", "onClick: 1564");
switch (view.getId()){
case R.id.btn_en:
switchLanguage("en");
break;
case R.id.btn_zh:
switchLanguage("ch");
break;
}
//更新语言后,destroy当前页面,重新绘制
finish();
Intent it = new Intent(MainActivity.this, MainActivity.class);
startActivity(it);
}
}
总结:多语言操作类可以不用继承,单独作为一个工具类,在执行时需传入Context,避免getResource空指针
源码code:
两个类的代码都在上面了,除了界面和资源文件,就不贴了