【效果图】
(A)国家化(多语言选择)
(1)切换到中文
中文.png(2)切换到英文
英文.png【总结】做N套xml, 切换不同xml来实现N多语言切换。(注意:命名规则)
【步骤】
(1) 右击res目录,打开对应的对话框:
(2) 选择local选项,然后点击右推的按钮,创建和选择新的语言资源文件,注意以下这几个地方需要正确填写:
图片2.png 图片3.png此时,你会发现在开发项目目录中多了一个文件夹和文件:
图片4.png(3) 接着把默认的values/strings.xml中的内容全部复制到values-en/strings.xml中,然后把内容中的文字顺便翻译成对应的语言:(百度翻译,谷歌翻译都行)
中文翻译.png英文翻译.png
【注】来到这里,资源文件就配置好了,以下是更改系统的语言设置。
Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
configuration.locale = newLocale;
resources.updateConfiguration(configuration,
resources.getDisplayMetrics());//更新配置
【注】
一般的更改语言的选项都在App的设置里面,改变系统的Locale以后并不会马上生效,需要重启App以后才会有效。如果要及时生效,就需要重启MainActivity,方法如下:
//重启MainActivity
Intent intent = new Intent(SettingActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
【完整源代码】
【1】 使用
/**
* @Author Lee
* @Time 2018/4/26
* @Theme 多语言切换(国际化)
*/
public class MultilingualSwitchActivity extends AppCompatActivity implements View.OnClickListener {
private Dialog mDialod;
private Window window;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activit_multilingual);
initView();
}
private void initView() {
findViewById(R.id.tv_language).setOnClickListener(this);
}
private void showDialogLanguage() {
mDialod = new Dialog(MultilingualSwitchActivity.this, R.style.dialog);
mDialod.requestWindowFeature(Window.FEATURE_NO_TITLE);
window = mDialod.getWindow();
window.setGravity(Gravity.TOP | Gravity.RIGHT);
window.setContentView(R.layout.dialog_language);
TextView tvSingle = window.findViewById(R.id.tv_simple);
TextView tvTradition = window.findViewById(R.id.tv_tradition);
tvSingle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mDialod.dismiss();
switchLanguage("zh");
Intent i = MultilingualSwitchActivity.this.getPackageManager().getLaunchIntentForPackage(MultilingualSwitchActivity.
this.getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
MultilingualSwitchActivity.this.overridePendingTransition(0, 0);
}
});
tvTradition.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mDialod.dismiss();
switchLanguage("hk");
Intent i = MultilingualSwitchActivity.this.getPackageManager().getLaunchIntentForPackage(MultilingualSwitchActivity.this.getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
MultilingualSwitchActivity.this.overridePendingTransition(0, 0);
}
});
mDialod.show();
}
//核心设置的代码
protected void switchLanguage(String language) {
Resources resources = getResources();
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources.getDisplayMetrics();
switch (language) {
case "zh":
config.locale = Locale.CHINESE;
resources.updateConfiguration(config, dm);
break;
case "hk":
config.locale = Locale.ENGLISH;
resources.updateConfiguration(config, dm);
break;
default:
config.locale = Locale.US;
resources.updateConfiguration(config, dm);
break;
}
}
@Override
public void onClick(View view) {
showDialogLanguage();
}
}
【2】activit_multilingual 布局文件
【注意】 text 里面的文本 要用软引用 @string/... 这种格式,方能实现多语言切换。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/margin_10dp">
<TextView
android:id="@+id/tv_language"
android:background="@color/colorOrange"
android:layout_marginRight="8dp"
android:layout_alignParentRight="true"
android:padding="@dimen/padding_10dp"
android:layout_gravity="right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/change_language"
android:textColor="@color/black"
android:drawableRight="@mipmap/down"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_centerInParent="true"
android:text="@string/content"/>
</RelativeLayout>
【3】dialog_language 对话框布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/select_frame"
android:layout_marginTop="40dp"
android:layout_marginRight="@dimen/margin_10dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_tradition"
android:layout_width="wrap_content"
android:paddingTop="@dimen/padding_10dp"
android:paddingRight="@dimen/padding_20dp"
android:paddingLeft="@dimen/padding_20dp"
android:paddingBottom="@dimen/padding_10dp"
android:layout_height="wrap_content"
android:textColor="@color/main_color"
android:text="繁体中文"/>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:paddingLeft="@dimen/padding_5dp"
android:paddingRight="@dimen/padding_5dp"
android:background="@color/colorD5D5D5"/>
<TextView
android:id="@+id/tv_simple"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="@dimen/padding_20dp"
android:paddingLeft="@dimen/padding_20dp"
android:textColor="@color/main_color"
android:paddingBottom="@dimen/padding_10dp"
android:paddingTop="@dimen/padding_10dp"
android:text="简体中文"/>
</LinearLayout>
【4】 style 文件 对话框样式
<style name="dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:backgroundDimAmount">0.6</item>
</style>
【参考】
(1) https://blog.csdn.net/qq_21983189/article/details/73735278
(2) https://blog.csdn.net/myth13141314/article/details/6203719
网友评论