我的屏幕上显示以下项目:
EditText Forename
Spinner gender selection (Male | Female)
EditText Email
首次启动应用程序时,我希望将焦点设置在 Forename EditText 上。然后在微调器中选择“男性”或“女性”后,
我希望将焦点设置在位于微调器下方的电子邮件 EditText 上。
我用过setOnItemSelectedListener
设置requestFocus
在电子邮件 EditText 上,但问题是它会自动将焦点设置在
每当我启动应用程序时都会使用此 EditText。
发生这种情况是因为默认情况下,微调器显示第一个选择,在本例中是“男性”,因此它认为
已做出选择并将焦点设置在“电子邮件”字段上。
我不介意默认情况下已在微调器中选择的第一个选择,但如果我可以以某种方式覆盖requestFocus
要设置在
最初命名 EditText 会很棒。
XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/ForenameForm"
android:layout_width="285dp"
android:layout_height="65dp"
android:hint="@string/forenameHint"
android:lines="1"
android:singleLine="true"
android:textSize="20sp" >
</EditText>
<Spinner
android:id="@+id/SpinnerGender"
android:spinnerMode="dialog"
android:textSize="30sp"
android:layout_width="285dp"
android:layout_height="60dp"
android:prompt="@string/spinnerGender"
android:entries="@array/genderList">
</Spinner>
<EditText
android:id="@+id/EmailForm"
android:layout_width="285dp"
android:layout_height="65dp"
android:hint="@string/emailHint"
android:lines="1"
android:singleLine="true"
android:textSize="20sp" >
</EditText>
</LinearLayout>
活动类别:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText forename=(EditText)findViewById(R.id.ForenameForm);
forename.requestFocus();
final EditText email=(EditText)findViewById(R.id.EmailForm);
Spinner spinner=(Spinner)findViewById(R.id.SpinnerGender);
spinner.setFocusable(true);
spinner.setFocusableInTouchMode(true);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
email.requestFocus();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
这个解决方案怎么样。
define a boolean flag and set it default false.
in oncreate set the focus of forname
in setOnItemSelectedListener
if flag is false then set flag true
else focus email
所以你的代码会像
boolean flag = false;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText forename=(EditText)findViewById(R.id.ForenameForm);
forename.requestFocus();
final EditText email=(EditText)findViewById(R.id.EmailForm);
Spinner spinner=(Spinner)findViewById(R.id.SpinnerGender);
spinner.setFocusable(true);
spinner.setFocusableInTouchMode(true);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// changes here
if(flag == false)
flag = true;
else
email.requestFocus();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)