2012-06-15 2 views
0

저는 Java에 익숙하지만 Android 프로그래밍을 배우고 있습니다. 안녕하세요, LinearLayout 예제의 색상 막대가 꽤 마음에 들었습니다. 그래서 저는 이것을 13 개월 된 작은 프로그램으로 확장하려고 노력해 왔습니다. 레이블과 4 개의 행으로 7 가지 색상을 표시했습니다. 한 두 가지 일을하고 싶습니다. (이중 언어이므로), 앱을 종료하고 새로운 로케일을로드 한 다음 앱을 다시 시작하지 않고도 즉시 로케일 표시 언어를 변경할 수 있습니다 (작동하지만 지루하다). 따라서 7 가지 색상 막대가 선택한 언어에 맞게 레이블이 지정되었지만 프로그램을 종료하는 대신 프로그램 내에서 클릭으로 변경할 수 있기를 바랍니다. 다른 말로하면, 나는 정말로 휴대 전화 전체가 아닌, 앱의 범위 내에서만 로케일을 변경하고 싶습니다.Android 로케일을 즉시 변경하려고합니다.

여기에 로케일 변경 사항에 대한 몇 가지 팁이 있지만이 인스턴스에서는 100 % 전혀 작동하지 않습니다. 내가 한 것은 Spinner 코드를 레이아웃과 결합하는 것입니다. 모든 것을 하나의 파일로 유지하려고합니다. (현재는) 변수와 범위가 모두 작동하고 있다는 것을 알기 위해서입니다. ("공식적인"Android HelloSpinner 코드 에서처럼 앞뒤로 물건을 전달하려고 시도했지만 아무 것도 만들지 않았습니다. 그러나 엉망). HelloLinearLayout의 사용자 정의 버전에 대해 지금까지 코딩 한 내용은 다음과 같습니다.

감사합니다. 오, 나는 진저 브레드에 대한 테스트와 테스트를하고 있습니다. HTC 폰이 실행되기 때문입니다.

package net.buellnet.hellolinearlayout; 

import java.util.Locale; 

import android.app.Activity;<br/> 
import android.content.res.Configuration;<br/> 
import android.os.Bundle;<br/> 
import android.view.View; 
import android.widget.AdapterView;<br/> 
import android.widget.ArrayAdapter;<br/> 
import android.widget.Spinner;<br/> 
import android.widget.Toast;<br/> 

public class HelloLinearLayoutActivity extends Activity {<br/> 
    /** Called when the activity is first created. */<br/> 
    @Override<br/> 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Spinner spinner = (Spinner) findViewById(R.id.spinner); 
     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
       this, R.array.lang_array, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     spinner.setAdapter(adapter); 
     spinner.setHapticFeedbackEnabled(true); 
     spinner.setOnItemSelectedListener(null); 
    } 

      public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 

       String language = parent.getItemAtPosition(pos).toString(); 
       Configuration newConfig = new Configuration(); 

       Toast.makeText(parent.getContext(), "The language is " + 
          parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();<br/> 
/* I threw the above line in just to see if the control was working. I can change the "language" but the Toast line never pops up, nor does the locale ever change. */ 

       if (language.equals("English")) { 
        newConfig.locale = Locale.ENGLISH; 
        super.onConfigurationChanged(newConfig); 

        Locale.setDefault(newConfig.locale); 
        getBaseContext().getResources().updateConfiguration(newConfig, getResources().getDisplayMetrics()); 
       } 
       else if (language.equals("French")) { 
        newConfig.locale = Locale.FRENCH; 
        super.onConfigurationChanged(newConfig); 

        Locale.setDefault(newConfig.locale); 
        getBaseContext().getResources().updateConfiguration(newConfig, getResources().getDisplayMetrics()); 
       } 
       else if (language.equals("German")) { 
        newConfig.locale = Locale.GERMAN; 
        super.onConfigurationChanged(newConfig); 

        Locale.setDefault(newConfig.locale); 
        getBaseContext().getResources().updateConfiguration(newConfig, getResources().getDisplayMetrics()); 
       } 
       else if (language.equals("Italian")){ 
        newConfig.locale = Locale.ITALIAN; 
        super.onConfigurationChanged(newConfig); 

        Locale.setDefault(newConfig.locale); 
        getBaseContext().getResources().updateConfiguration(newConfig, getResources().getDisplayMetrics()); 
       } 
       else if (language.equals("Portuguese")) { 
        newConfig.locale = new Locale("pt"); 
        super.onConfigurationChanged(newConfig); 

        Locale.setDefault(newConfig.locale); 
        getBaseContext().getResources().updateConfiguration(newConfig, getResources().getDisplayMetrics()); 
       } 
       else if (language.equals("Spanish")) { 
        newConfig.locale = new Locale("es"); 
        super.onConfigurationChanged(newConfig); 

        Locale.setDefault(newConfig.locale); 
        getBaseContext().getResources().updateConfiguration(newConfig, getResources().getDisplayMetrics()); 
       } 
      } 

      public void onNothingSelected(AdapterView parent) { 
        // Do nothing. 
      } 
} 
</code> 

답변

0
try updateConfiguration function to set new Locale........ 


    Resources res = context.getResources(); 
// Change locale settings in the app. 
DisplayMetrics dm = res.getDisplayMetrics(); 
android.content.res.Configuration conf = res.getConfiguration(); 
conf.locale = new Locale(language_code.toLowerCase()); 
res.updateConfiguration(conf, dm); 

in place of spinner.setOnItemSelectedListener(null);

1 - public class HelloLinearLayoutActivity extends Activit implements Spinner.OnItemSelectedListener 
2- spinner.setOnItemSelectedListener(this); 
+0

'dm'은 ... 무엇입니까? –

+0

ohhh sorry ... updated complete ....... –

+0

내 문제는 회 전자 수신기를 트리거 할 때 실제로 응답하지 않는 것으로 보입니다. 나는 드롭 다운을 누를 수 있고, 공백으로 시작하여 'German'을 선택하면 내 화면 맨 아래에 독일어가 표시 될 것입니다. (내 레이아웃/main.xml에 모두 들어 있습니다.) 실제로 아무 것도 변경되지 않습니다. 독일 사람. –

0

은이 방법을 사용해보십시오! 아래 코드를 참조하십시오 (setContentView가 onCreate 메소드 안에 더 이상 존재하지 않음을주의하십시오) :

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    doUIStuff(); 
    //otherThanUILogicGoesHere 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    if (JustModifiedLocale){ 
     doUIStuff(); 
    } 
} 

void doUIStuff(){ 
    setContentView(R.layout.my_layout); 
    //other UI_related necessary initializations go here 
} 
관련 문제