2012-07-30 2 views
1

내 앱에서 프로그래밍 방식으로 언어를 변경하고 싶습니다. 첫 번째 onCreate (Bundle) 메서드가 작동하고 이미지가 중국어로 표시됩니다. 두 번째는 작동하지 않습니다. "TODO"코멘트에 무엇을 삽입해야합니까? 뷰를 만든 후에 언어를 변경하고이를 업데이트하려고합니다.Android 앱에서 언어 변경

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TranslationHelper.changeLanguage(this, Locale.CHINESE); 
    setContentView(R.layout.main_activity); 
    doBindService(); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_activity); 
    TranslationHelper.changeLanguage(this, Locale.CHINESE); 
    // TODO recreate view to display chinese version 
    doBindService(); 
} 

답변

0

setContentView 메서드가 호출되기 전에 로캘이 변경되기 때문에 첫 번째 예제가 작동합니다. setContentView 앞에 changeLanguage을 삽입해야합니다. setContentView 이후 모든보기가 이미 비정상적으로 변경되었으므로이 시점에서 로캘을 변경해도 아무런 효과가 없습니다. 보기를 만든 후에 언어를 변경하려면 수동으로 업데이트해야합니다.

+0

그래, 알아. 하지만 어떻게 수동으로 업데이트 할 수 있습니까? –

+0

'Resources' 클래스에서 로케일을 변경한다면'Context.getString'은 새로운 로케일의 텍스트를 반환해야합니다. 따라서 모든 'TextView' 엔티티에 대한 텍스트를 수동으로 설정해야합니다. 뷰 계층 구조를 다시 만들지 않고도이 작업을 한 번에 수행 할 수는 없습니다. 그리고 왜'setContentView'를 호출하기 전에 로케일을 바꿀 수 없습니까? 확실히 더 간단 할 것입니다. –

+0

사용자가 뒤로 버튼을 눌렀을 때 뷰를 다시 만들지 않고 이전 언어를 표시 할 수 없기 때문에 –