2012-07-25 2 views
1

내 Android 애플리케이션이 이중 언어입니다. 그래서 2 res 폴더 값과 가치 - sw (스와힐리어에 대한). 이 파일에서 문자열 값을 디자인 할 때 그리고 실행시 가져 오는 중입니다. 레이아웃의 예를 들면 :getResources(). 방향이 변경된 후 getString()이 작동하지 않습니다.

getResources().getString(R.string.Officer); 

가 난에서 onCreate (에 전화 기능이 설정 로케일을 변경하려면) 다음과 같습니다 :

public void ChangeLanguage(Context ctx,String Language){ 
     Resources res = ctx.getResources(); 
     DisplayMetrics dm = res.getDisplayMetrics(); 
     android.content.res.Configuration config = res.getConfiguration(); 
     config.locale = new Locale(Language.toLowerCase()); 
     res.updateConfiguration(config, dm); 
} 

android:hint="@string/Officer" 

및 코드에서

모두 잘 작동합니다. 방향을 바꾸어야 만 문제가 발생합니다.

예를 들어 시동 할 때 언어를 스와힐리어로 설정합니다. 그래서 모든 것이 스와힐리어에 있습니다. 이제 방향을 수직에서 수평 또는 바이스로 변경합니다. 레이아웃에 설정된 텍스트 상자 힌트는 내가 예상하는 스와힐리어에 남아 있습니다. 하지만 getResources(). getString (R.string.Officer); 기본값 인 default 파일에서 값을 가져옵니다.

제안 사항? 활동에

답변

0

설정 android:configChanges="orientation" 파괴 될 수와 방향이 변경 될 때 재 작성하지 활동을하게됩니다 이렇게 AndroidManifest.xml을

있다.

+0

안녕하세요 @ Waqas 답장을 보내 주셔서 감사합니다. 이미 Menifest 파일에 해당 설정이 있습니다. <= 이름 안드로이드 활동 안드로이드 : 라벨 = "@ 문자열/APP_NAME" 안드로이드 : "EnrollmentActivity."configChanges = "오리엔테이션 | keyboardHidden"> –

+0

당신의 AndroidManifest.xml – waqaslam

+0

의 일부를 붙여 <의도 필터> 을

0

android:configChanges 특성이있는 문제는 방향 변경 후 onCreate()가 호출되지 않도록하는 것입니다. 기본적으로 앱에 방향을 바꿀 것이므로 화면을 다시 만들지 말고 처리 할 것입니다.

메서드에서 해당 기능을 호출하는 것이 좋습니다. 그 시점에서 뷰가 null이된다는 것을 명심하십시오. 필요하면 새로운 참조를 얻어야합니다.

0

나는 앱에서 영어와 스와힐리어를 사용하여 질문과 동일한 사례를가집니다. 이것은 어떻게 해결할 수 있습니까? values-sw이라는 폴더를 만든 다음 string.xml이라는 리소스 파일을 만든 폴더에 생성했습니다. 이것은 나의 모든 스와힐리어 번역이 쓰여지는 곳이다. 변경 사항을 적용하려면

public static void setLocale(Context context) { 
    SharedPreferences sharedPreferences = context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE); 
    String userLocale = sharedPreferences.getString("userlocale", null); // adapt to your need 
    if (userLocale != null) { 
     Locale locale = new Locale(userLocale); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 
    } 
} 

그나마 활동을 갱신하는 것을 잊지 : 나는에서 onCreate에서 다음 메소드를 호출

finish(); 
startActivity(getIntent()); 

은 (내가이 답변을 꽤 늦게 알고 난 희망이 거기에 사람을 도움 , 환호!)

관련 문제