我想支持我的申请英语,印地语,乌尔都语。
为此,我创建了两个值字符串文件夹,如values-hi,values-ur,然后默认strings.xml为英语,当我点击Urdu时,我需要为所有标签加载Urdu字符串文件并进行UI RTL支持。
答案 0 :(得分:0)
我使用某种ContextWrapper解决了类似的问题,迫使语言出现在任何活动中。
ContextWrapper代码是:
public class ContextWrapper extends android.content.ContextWrapper {
public ContextWrapper(Context base) {
super(base);
}
@SuppressWarnings("deprecation")
public static ContextWrapper wrap(Context context, Locale newLocale) {
Resources res = context.getResources();
Configuration configuration = res.getConfiguration();
if (BuildUtils.isAtLeast24Api()) {
configuration.setLocale(newLocale);
LocaleList localeList = new LocaleList(newLocale);
LocaleList.setDefault(localeList);
configuration.setLocales(localeList);
context = context.createConfigurationContext(configuration);
} else if (BuildUtils.isAtLeast17Api()) {
configuration.setLocale(newLocale);
context = context.createConfigurationContext(configuration);
} else {
configuration.locale = newLocale;
res.updateConfiguration(configuration, res.getDisplayMetrics());
}
return new ContextWrapper(context);
}
}
您必须在要强制语言的每个活动中继承attachBaseContext生命周期回调,例如。
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(ContextWrapper.wrap(base, Locale.ENGLISH));
}
显然,如果你想在当前活动中改变语言,你必须重新加载它。