2012-06-15 34 views
0

我熟悉Java,但只是學習的Android編程。我很喜歡他們的Hello,LinearLayout示例中的顏色條,所以我一直試圖將它擴展爲一個我可以在13個月大的時候使用的小程序。我有它顯示七種顏色與標籤和四行。我希望做的一件事(因爲我是雙語),就是能夠在不退出應用程序,加載新語言環境並再次啓動應用程序的情況下即時更改語言環境顯示語言(這適用於這很乏味)。因此,七種顏色條被貼上適用於所選語言的標籤,但我希望這些顏色條能夠在程序中單擊進行更改,而不是退出程序。換句話說,我真的只想改變應用程序範圍內的區域設置,而不是整個手機。試圖改變Android的區域設置在飛行

我發現一對夫婦在這裏設置更改的提示,但沒有在這種情況下相當多100級%的作品。我所做的是將微調代碼與佈局相結合。我試圖把所有東西放在一個文件中(現在),以便我知道變量和作用域都可以工作(我曾試着像在「官方」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對不起...更新完成....... –

+0

我的問題似乎是,微調偵聽器(如果我可以這樣稱呼它)實際上並沒有響應任何改變,當我觸發它。我可以按下下拉菜單,它以空白開始,選擇「德語」,它會在我的屏幕底部顯示德語(這些都在我的layout/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 
}