我熟悉Java,但只是学习Android 编程。我非常喜欢他们的 Hello, LinearLayout 示例中的彩条,所以我一直在尝试将其扩展为一个小程序,我可以在我 13 个月大的孩子身上使用。我让它显示七种颜色的标签和四行。我想做的一件事(因为我会说双语),就是能够即时更改区域设置显示语言,而无需退出应用程序、加载新的区域设置并再次启动应用程序(这可行,但是这很乏味)。因此,七个颜色条被标记为适合所选语言,但我希望能够通过在程序中单击来更改这些颜色条,而不是退出程序。换句话说,我真的只想在应用程序范围内更改区域设置,而不是整个手机。
我在这里找到了一些关于区域设置更改的提示,但在这种情况下没有任何 100% 有效。我所做的是将 Spinner 代码与布局结合起来。我正在尝试将所有内容保存在一个文件中(暂时),以便我知道变量和范围都在工作(我曾尝试像在“官方”Android HelloSpinner 代码中那样来回传递东西,但这没有任何作用但一团糟)。到目前为止,这是我为自定义版本的 HelloLinearLayout 编写的代码:
任何和所有的建议表示赞赏!哦,我正在针对 Gingerbread 进行构建和测试,因为这就是我的 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>