dav*_*avs 5 android localization menu
我想以编程方式更改语言(应用程序的语言环境).
我的主要问题是更新菜单标签.
我尝试了以下方法:
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (shouldChangeMenuLabels) {
for (int i = 0; i < menu.size(); i++) {
MenuItem menuItem = menu.getItem(i);
switch (menuItem.getItemId()) {
case R.id.menu_main_about:
menuItem.setTitle(R.string.menu_about);
break;
case R.id.menu_main_preferences:
menuItem.setTitle(R.string.menu_prefs);
break;
}
}
shouldChangeMenuLabels = false;
}
Run Code Online (Sandbox Code Playgroud)
但我确定这是个坏主意.我想避免使用switch-case语句,因为这不是通用方法(我不能简单地将剪切端口移植到其他活动/我不能创建抽象类,这样做).
顺便说一句,所有菜单都被描述为menu/*.xml文件,所以我不想复制代码.有人有想法吗?
关注第一个答案:我使用以下代码更改了语言环境:
Locale locale = new Locale((String)newValue);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getApplication().getResources().updateConfiguration(config, getApplication().getResources().getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)
但是,由于我想控制每个活动的旋转,它们永远不会完成.也许我做错了什么?
我不知道这是个好主意,但我发现了以下方式:
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (shouldChangeLocale) {
menu.clear();
MenuInflater inflater = getMenuInflater(); // -->onCreateMenu (Menu)
inflater.inflate(R.menu.menu_main, menu); // /
shouldChangeLocale=false;
}
return super.onMenuOpened(featureId, menu);
}
Run Code Online (Sandbox Code Playgroud)
我需要你的建议,我应该这样做吗?
| 归档时间: |
|
| 查看次数: |
3836 次 |
| 最近记录: |