提示:以下是本篇文章正文内容,下面案例可供参考
前置条件
一、需要系统权限,即在 AndroidManifest.xml 中加上 android:sharedUserId="android.uid.system"
二、需要导入 frameword.jar
涉及到的关键类
1、/fameworks/base/core/java/com/android/internal/app/LocaleStore.java
2、/fameworks/base/core/java/com/android/internal/app/LocaleHelper.java
3、/fameworks/base/core/java/com/android/internal/app/LocalePicker.java
类的使用
1、LocalePicker 的使用
a) 获取当前可选择语言列表
LocalePicker.getLocales()
b) 设置使用的语言列表,同时更新系统语言
语言列表设置为一个,
LocalePicker.updateLocale(Locale.CHINESE);
语言列表更新为这个
LocalePicker.updateLocales()
c) 获取所有内置的语言
LocalePicker.getAllAssetLocales()
2、LocaleHelper的使用
a) 获取语言的名称
LocaleHelper.getDisplayName(localeInfo.getLocale(), localeInfo.getLocale(), true))
LocaleHelper.getDisplayName(localeInfo.getLocale(), true)
示例
代码
public class LocaleTestActivity extends Activity {
private static final String TAG = "LocaleTestActivity";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LocaleTestBinding binding = DataBindingUtil.setContentView(this, R.layout.locale_test);
binding.getAllLanguage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// LogUtils.d(TAG, Arrays.toString(.toArray(new LocalePicker.LocaleInfo[]{})));
LogUtils.d(TAG, "获取所有的语言信息:" + get());
LogUtils.d(TAG, "获取列表中的所有语言:" + LocalePicker.getLocales().toString());
LogUtils.d(TAG, "获取系统语言信息:" + Arrays.toString(LocalePicker.getSystemAssetLocales()));
LogUtils.d(TAG, "获取列表中指定语言所在的位置:" + LocalePicker.getLocales().indexOf(new Locale("zh")));
LogUtils.d(TAG,
"level__" + Arrays.toString(LocaleStore.getLevelLocales(LocaleTestActivity.this, new HashSet<String>(), null, false).toArray(new LocaleStore.LocaleInfo[]{})));
LocalePicker.LocaleInfo localeInfo = LocalePicker.getAllAssetLocales(LocaleTestActivity.this, false).get(1);
LocalePicker.updateLocale(localeInfo.getLocale());
LogUtils.d(TAG, " 获取语言的名称(对应该语言的) getFullNameNative: " + LocaleHelper.getDisplayName(localeInfo.getLocale(), localeInfo.getLocale(), true));
LogUtils.d(TAG, " 获取语言的名称(对应设置语言的) getFullNameInUiLanguage: " + LocaleHelper.getDisplayName(localeInfo.getLocale(), true));
}
});
binding.setChinese.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LocalePicker.updateLocale(Locale.CHINESE);
}
});
binding.setEnglish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LocalePicker.updateLocale(Locale.UK);
}
});
}
private String get(){
StringBuilder builder = new StringBuilder();
for(LocalePicker.LocaleInfo info : LocalePicker.getAllAssetLocales(LocaleTestActivity.this, false)){
builder.append("label: " + info.getLabel() + " locale: " + info.getLocale().toString() + " tag: " + info.getLocale().toLanguageTag() + "\n");
}
return builder.toString();
}
}
对应的 locale_test.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/get_all_language"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取设置的所有语言"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.019"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.038" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/set_chinese"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置为中文"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/get_all_language"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/get_all_language"
app:layout_constraintTop_toBottomOf="@+id/set_english"
app:layout_constraintVertical_bias="0.065" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/set_english"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置为英文"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/get_all_language"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/get_all_language"
app:layout_constraintTop_toBottomOf="@+id/get_all_language"
app:layout_constraintVertical_bias="0.042" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
打印结果
版权声明:本文为huangsitao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。