我熟悉Java,但只是学习Android编程。我非常喜欢他们的Hello,LinearLayout示例中的颜色栏,所以我一直在尝试将其扩展为一个可以用于我13个月大的孩子的小程序。我让它显示七种颜色的标签和四行。我想做的一件事(因为我会双语),就是能够动态更改区域设置显示语言,而无需退出应用程序,加载新区域设置,然后再次启动应用程序(这很有效,但很乏味)。因此,七个颜色条的标签适合所选语言,但我希望这些颜色条能够在程序中单击更改,而不是退出程序。换句话说,我真的只想更改应用程序范围内的语言环境,而不是整个手机。
我在这里找到了一些关于区域设置更改的提示,但在这种情况下没有什么是百分之百有效的。我所做的是将微调器代码与布局相结合。我试图将所有内容都保存在一个文件中(目前),以便知道变量和作用域都在工作(我曾尝试像在“官方”Android HelloSpiner代码中一样来回传递东西,但这只会造成混乱)。到目前为止,我为我的定制版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>
用这种方式试试!请参阅下面的代码(注意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
}
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);
代替<代码>微调器。setOnItemSelectedListener(null)
1 - public class HelloLinearLayoutActivity extends Activit implements Spinner.OnItemSelectedListener
2- spinner.setOnItemSelectedListener(this);
我正在开发一个应用程序,使用3种语言的文本。英语、库尔德语和阿拉伯语。我试图在用户更改语言时动态更改布局。我有一个设置屏幕,用户可以在其中更改语言,即我不是在系统设置中更改语言,而是在我的应用程序中更改语言。例如,如果我从库尔德语切换到英语,布局应该从RTL更改为LTR,反之亦然。我尝试使用onConfigUserOnChanged(),但它没有被触发。 更改区域设置:强制活动重新加载资源?找到了
问题内容: 我在Edittext的addTextChangedListener方法中已自定义,一切正常,但是当我更改语言(语言环境)时,我的addTextChangedListener无法正常工作。 我搜索了我的问题并找到了解决方案: 但我不知道如何使用此代码。 问题答案: 您可以尝试先转换为,然后将其投射到
问题内容: 我有一个Action类,我想获取应用程序的语言环境并在此处进行更改,但是我不知道怎么做,也找不到答案。 我可以使用获取当前的语言环境 但是我不知道如何 设置语言环境 。 我想在上述Action类中直接为我的应用更改语言环境。我怎样才能做到这一点? 问题答案: 使用和将其放在HTTP会话中 。
在我的应用程序中,用户应该能够切换区域设置(用于在页面上呈现文本的语言)。大量教程使用FacesContext.get货币实例()。getViewRoot()。setLocale()。例如:http://www.mkyong.com/jsf2/jsf-2-internationalization-example/.但是,这在JSF 2.0中根本不起作用(它在1.2中确实起作用)。这种语言从不切换。
问题内容: 我需要包括两个按钮或链接,以允许用户在英语和西班牙语之间更改语言。我已经阅读了文档并尝试了以下操作: 但是,每次我单击该按钮时,页面都会重新加载,但语言完全不变。我想念什么吗? 注意:我尚未设置,因为我只想以所需的语言重新加载当前页面。 如果我使用文档提供的默认格式,则结果是相同的:页面重新加载,但语言未更改: 更新: 经过进一步测试后,我注意到在和中都使用和都存在问题。目前,我有一个
为应用程序创建多语言支持,可以更改应用程序中的语言设置。 至于现在,一切都适用于英语、西班牙语、法语、俄语,但不适用于印地语和汉语。 1) 我以原始语言指定语言名称,但在应用程序中指定,而不是हिन्दी 我能看到“印地语”。 \res \ values hi \数组。xml 2) 选择“印地语”后结束-实际上选择了默认值(英语) \res\values hi\strings。xml .... 在