在很多app中都涉及到中英文切换 繁体简体切换,再此简单的记录一下
1,首先大家要清楚,默认情况下,Android会根据系统的语言地区设置,自动选择对应的资源。也就是说会首先尝试语言地区全匹配,如果没有权匹配的 资源包,则会尝试匹配语言,最后则会取默认的。比如如果Android系统的语言地区是中文简体,则首先会尝试从/values-zh-rCN中获取资源, 如果没有此文件夹或者文件夹中没有响应的资源,则会尝试/values-zh,都获取不到的情况下即从/values中获取。
(/values是必须存在的,否则不能通过编译)
2,在命名values文件时是有要求的,下面是地区的命名连接:点击打开链接 ,接下来就是在不同的values中鲁相关语言的string代码
3,书写相关代码,效果图
public class MainActivity extends AppCompatActivity {
ImageButton btn_settings;
AlertDialog dialog;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//读取SharedPreferences数据,初始化语言设置
setLanguage();
getSupportActionBar().hide();
setContentView(R.layout.activity_main);
btn_settings = (ImageButton) findViewById(R.id.btn_settings);
//点击设置按钮进入语言设置
btn_settings.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
//创建单选框
final AlertDialog.Builder builder = new
AlertDialog.Builder(MainActivity.this);
builder.setSingleChoiceItems(new String[]{"Auto", "简体中文"},
getSharedPreferences("language", Context.MODE_PRIVATE).getInt("language",0),
new DialogInterface.OnClickListener() {
//点击单选框某一项以后
public void onClick(DialogInterface dialogInterface, int i) {
//将选中项存入SharedPreferences,以便重启应用后读取设置
SharedPreferences preferences = getSharedPreferences("language", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("language",i);
editor.apply();
dialog.dismiss(); Intent intent = new Intent(MainActivity.this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); /* 重新在新的任务栈开启新应用 Intent intent = new Intent(MainActivity.this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); android.os.Process.killProcess(android.os.Process.myPid()); */ } }); dialog = builder.create(); dialog.show(); } }); }/*setLanguage();
重要的代码其实就是这里
*/ private void setLanguage() { //读取SharedPreferences数据,默认选中第一项 SharedPreferences preferences = getSharedPreferences("language", Context.MODE_PRIVATE); int language = preferences.getInt("language", 0); //根据读取到的数据,进行设置 Resources resources = getResources();//获得资源对象 DisplayMetrics displayMetrics = resources.getDisplayMetrics(); //获取手机屏幕参数 Configuration configuration = resources.getConfiguration(); //Configuration类是专门用来描述手机设备上的配置信息。
这些配置信息包括用户特定的配置项,也包括系统的动态设备配置。 switch (language){ case 0: configuration.setLocale(Locale.getDefault());//设置为手机系统默认的语言 break; case 1: configuration.setLocale( Locale.CHINESE); //设置为英文,系统会检测values_en的资源文件,如果没有会执行values中的文件 break; default: break; } resources.updateConfiguration(configuration,displayMetrics);//更新修改后的资源配置 }