프로그래밍 방식으로 언어 (응용 프로그램의 로캘)를 변경하고 싶습니다.Android 및 메뉴 현지화
나를 위해 주요 문제는 메뉴 레이블을 업데이트하는 것입니다.
나는 다음과 같은 방법을 시도 :@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;
}
을하지만 그것은 나쁜 생각 확신합니다. 이 스위치는 보편적 인 방법이 아니므로 switch-case 문을 사용하지 않으려합니다 (단순히 다른 활동에 끼워 넣을 수는 없습니다/그렇게 할 추상 클래스를 만들 수는 없습니다).
현재 모든 메뉴는 메뉴/*. xml 파일에 설명되어 있으므로 코드를 복제하지 않아도됩니다. 누구에게 아이디어가 있습니까? 첫 번째 대답에
우려 :
Locale locale = new Locale((String)newValue);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getApplication().getResources().updateConfiguration(config, getApplication().getResources().getDisplayMetrics());
을하지만 각 활동에 대한 회전 제어하려면, 그들은이 완료되지 않습니다 : 나는 다음과 같은 코드로 로케일 변경 동해. 어쩌면 내가 뭔가 잘못한거야?
나는 그것을했다. (나는 값 -xx/string.xml과 values / string.xml을 의미한다). menu-xx/mymenu.xml을 생성 하시겠습니까? – davs
따라서, menu_about이라는 문자열을 갖는 values-xx/string.xml과 menu_about이라는 문자열을 갖는 values-yy/string.xml이 있습니다. 휴대 전화의 로케일을 yy로 설정했는데 문자열 값이 yy로 변경되지 않았습니까? 어떤 로케일로 테스트하고 있습니까? http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch 협상을 통해 사용하는 값을 결정하는 방법에 대해 로캘을 올바르게 구성하지 않았을 수 있습니다. –
en/ru 로케일로 테스트하고 있습니다. 그러나 활동을 파괴하지 않았으므로 메뉴가 업데이트되지 않았습니다. 그래서 메뉴를 지우고 처음부터 만들어 내기로 결정했습니다. – davs