我有多个Edittexts on action next我在xml中添加了nextFocus值。
但是,根据年龄不足复选框值的状态,一个编辑文本可见或不可见。所以我需要动态地关注YYYY editext。 但动态的requestFocus()无效。
单击“下一步”
需要执行的操作此电子邮件视图仅在未选中未选中时显示。
在YYYY edittext:控制后,下一次按钮点击会发生什么 用户名Edittext。当应用程序崩溃时,我无法在xml中使用FocusNext 每当电子邮件textview为GONE时
dobYearEt.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Log.i("focus","on yyyy");
if (actionId == EditorInfo.IME_ACTION_DONE ||
actionId == EditorInfo.IME_ACTION_NEXT) {
Log.i("focus",isUnderAge+"");
if(isUnderAge){
username_reg_ev_dob_row.setFocusableInTouchMode(true);
username_reg_ev_dob_row.requestFocus();
}else{
// NOTHING HAPPENS
// email_ev.setFocusableInTouchMode(true);
// dobYearEt.clearFocus();
email_ev.requestFocus();
// InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// mgr.showSoftInput(email_ev, InputMethodManager.SHOW_IMPLICIT);
}
return false;
}
XML
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/register"
android:layout_marginLeft="@dimen/sign_up_left_right_margin"
android:layout_marginRight="@dimen/sign_up_left_right_margin"
android:layout_marginTop="@dimen/sign_up_user_name_top_margin">
<!--<RelativeLayout-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content">-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/name_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3">
<EditText
android:id="@+id/firstname_ev"
style="@style/RegisterViewStyle"
android:hint=" FIRST NAME:"
android:textCursorDrawable="@null"
android:nextFocusForward="@+id/middle_ev"
android:nextFocusRight="@+id/middle_ev"
android:nextFocusDown="@+id/middle_ev"
android:nextFocusLeft="@+id/middle_ev"
android:nextFocusUp="@+id/middle_ev"/>
<View
android:layout_width="@dimen/sign_up_names_sep_width"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/middle_ev"
style="@style/RegisterViewStyle"
android:hint=" MIDDLE INITIAL:"
android:textCursorDrawable="@null"
android:nextFocusForward="@+id/lastname_ev"
android:nextFocusRight="@+id/lastname_ev"
android:nextFocusDown="@+id/lastname_ev"
android:nextFocusLeft="@+id/lastname_ev"
android:nextFocusUp="@+id/lastname_ev"/>
<View
android:layout_width="@dimen/sign_up_names_sep_width"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/lastname_ev"
style="@style/RegisterViewStyle"
android:hint=" LAST NAME:"
android:textCursorDrawable="@null"
android:nextFocusForward="@+id/dob_mm_et"
android:nextFocusRight="@+id/dob_mm_et"
android:nextFocusDown="@+id/dob_mm_et"
android:nextFocusLeft="@+id/dob_mm_et"
android:nextFocusUp="@+id/dob_mm_et"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/under18_check_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/raffle_blue_color"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/under18_tv"
android:text="I'm under 18 and/or don't have an email?"/>
</LinearLayout>
<LinearLayout
android:id="@+id/dob_parent_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!--android:weightSum="2"-->
<LinearLayout
style="@style/RegisterViewStyle2"
android:id="@+id/dob_container"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginRight="2dp"
android:layout_marginTop="@dimen/sign_up_field_sep_margin"
android:layout_weight="1"
android:orientation="horizontal">
<!--style="@style/RegisterViewStyle2"-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DOB:"
android:textColor="@color/edit_text_hint_color"
android:id="@+id/dob_label_tv"
/>
<!--<EditText-->
<!--android:id="@+id/dob_dd_et"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:background="@android:color/transparent"-->
<!--android:hint="_ _"-->
<!--android:textCursorDrawable="@null"-->
<!--android:inputType="number"-->
<!--android:maxLength="2"-->
<!--android:nextFocusForward="@+id/dob_mm_et"-->
<!--android:nextFocusRight="@+id/dob_mm_et"-->
<!--android:nextFocusDown="@+id/dob_mm_et"-->
<!--android:nextFocusLeft="@+id/dob_mm_et"-->
<!--android:nextFocusUp="@+id/dob_mm_et"/>-->
<EditText
android:id="@+id/dob_mm_et"
style="@style/RegisterViewStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:hint="MM"
android:textCursorDrawable="@null"
android:inputType="number"
android:maxLength="2"
android:nextFocusForward="@+id/dob_dd_et"
android:nextFocusRight="@+id/dob_dd_et"
android:nextFocusDown="@+id/dob_dd_et"
android:nextFocusLeft="@+id/dob_dd_et"
android:nextFocusUp="@+id/dob_dd_et"/>
<TextView
android:textColor="@color/edit_text_hint_color"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" / "/>
<!--<EditText-->
<!--android:id="@+id/dob_mm_et"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:background="@android:color/transparent"-->
<!--android:hint="_ _"-->
<!--android:inputType="number"-->
<!--android:textCursorDrawable="@null"-->
<!--android:maxLength="2"-->
<!--android:nextFocusForward="@+id/dob_yyyy_et"-->
<!--android:nextFocusRight="@+id/dob_yyyy_et"-->
<!--android:nextFocusDown="@+id/dob_yyyy_et"-->
<!--android:nextFocusLeft="@+id/dob_yyyy_et"-->
<!--android:nextFocusUp="@+id/dob_yyyy_et"/>-->
<EditText
android:id="@+id/dob_dd_et"
style="@style/RegisterViewStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:hint="DD"
android:inputType="number"
android:textCursorDrawable="@null"
android:maxLength="2"
android:nextFocusForward="@+id/dob_yyyy_et"
android:nextFocusRight="@+id/dob_yyyy_et"
android:nextFocusDown="@+id/dob_yyyy_et"
android:nextFocusLeft="@+id/dob_yyyy_et"
android:nextFocusUp="@+id/dob_yyyy_et"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" / "
android:textColor="@color/edit_text_hint_color"/>
<EditText
style="@style/RegisterViewStyle"
android:id="@+id/dob_yyyy_et"
android:layout_width="wrap_content"
android:textCursorDrawable="@null"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:hint="YYYY"
android:inputType="number"
android:maxLength="4"
/>
<!--android:nextFocusForward="@+id/email_ev"-->
<!--android:nextFocusRight="@+id/email_ev"-->
<!--android:nextFocusDown="@+id/email_ev"-->
<!--android:nextFocusLeft="@+id/email_ev"-->
<!--android:nextFocusUp="@+id/email_ev"-->
</LinearLayout>
<EditText
android:id="@+id/email_ev"
style="@style/RegisterViewStyle"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/sign_up_field_sep_margin"
android:layout_weight="1"
android:hint=" EMAIL:"
android:textCursorDrawable="@null"
/>
<!--android:nextFocusForward="@+id/password_reg_ev"-->
<!--android:nextFocusRight="@+id/password_reg_ev"-->
<!--android:nextFocusDown="@+id/password_reg_ev"-->
<!--android:nextFocusLeft="@+id/password_reg_ev"-->
<!--android:nextFocusUp="@+id/password_reg_ev"-->
<!--style="@style/RegisterViewStyle2"-->
<EditText
android:id="@+id/username_reg_ev_dob_row"
style="@style/RegisterViewStyle"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/sign_up_field_sep_margin"
android:layout_weight="1"
android:hint=" USERNAME:"
android:textCursorDrawable="@null"
android:visibility="gone"
android:nextFocusForward="@+id/password_reg_ev"
android:nextFocusRight="@+id/password_reg_ev"
android:nextFocusDown="@+id/password_reg_ev"
android:nextFocusLeft="@+id/password_reg_ev"
android:nextFocusUp="@+id/password_reg_ev"/>
</LinearLayout>
<EditText
android:id="@+id/username_reg_ev"
style="@style/RegisterViewStyle2"
android:layout_below="@+id/email_ev"
android:layout_marginTop="@dimen/sign_up_field_sep_margin"
android:hint=" USERNAME:"
android:textCursorDrawable="@null"
android:nextFocusForward="@+id/password_reg_ev"
android:nextFocusRight="@+id/password_reg_ev"
android:nextFocusDown="@+id/password_reg_ev"
android:nextFocusLeft="@+id/password_reg_ev"
android:nextFocusUp="@+id/password_reg_ev"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/password_reg_ev"
style="@style/RegisterViewStyle2"
android:layout_below="@+id/username_reg_ev"
android:layout_marginTop="@dimen/sign_up_field_sep_margin"
android:hint=" PASSWORD:"
android:layout_marginRight="2dp"
android:textCursorDrawable="@null"
android:inputType="textPassword"
android:nextFocusForward="@+id/confirm_password_reg_ev"
android:nextFocusRight="@+id/confirm_password_reg_ev"
android:nextFocusDown="@+id/confirm_password_reg_ev"
android:nextFocusLeft="@+id/confirm_password_reg_ev"
android:nextFocusUp="@+id/confirm_password_reg_ev"/>
<EditText
android:id="@+id/confirm_password_reg_ev"
style="@style/RegisterViewStyle2"
android:layout_below="@+id/password_reg_ev"
android:layout_marginTop="@dimen/sign_up_field_sep_margin"
android:hint=" CONFIRM PASSWORD:"
android:textCursorDrawable="@null"
android:inputType="textPassword"
android:nextFocusForward="@+id/group_code_reg_ev"
android:nextFocusRight="@+id/group_code_reg_ev"
android:nextFocusDown="@+id/group_code_reg_ev"
android:nextFocusLeft="@+id/group_code_reg_ev"
android:nextFocusUp="@+id/group_code_reg_ev"/>
</LinearLayout>
<EditText
android:id="@+id/group_code_reg_ev"
style="@style/RegisterViewStyle2"
android:layout_below="@+id/confirm_password_reg_ev"
android:layout_marginTop="@dimen/sign_up_field_sep_margin"
android:textCursorDrawable="@null"
android:hint=" GROUP CODE(OPTIONAL):"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/terms_conditions_signup_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:buttonTint="@color/raffle_blue_color"
/>
<TextView
android:id="@+id/terms_conditions_register_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/terms_conditions"/>
</LinearLayout>
<RelativeLayout
android:id="@+id/register_btn_rl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/registration_message"
android:layout_marginBottom="6dp"
android:layout_marginTop="@dimen/sign_up_btn_top_margin"
android:background="@color/raffle_blue_color">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:id="@+id/register_tv"
android:padding="6dp"
android:text="REGISTER"
android:textColor="@android:color/white"
android:textSize="@dimen/sign_up_edit_text_size"/>
</RelativeLayout>
</LinearLayout>
</ScrollView>
我已经提到了各种解决方案但没有任何工作
Set next EditText focused and editable on KEY_DOWN
答案 0 :(得分:2)
发生的事情是我从onEditorAction返回false - 因此默认的编辑器操作也是背靠背执行的,焦点立即从电子邮件editText移开。现在我回归真实,并且没有执行聋人行动。它现在正常工作。
dobYearEt.setOnEditorActionListener(new EditText.OnEditor ActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Log.i("focus","on yyyy");
if (actionId == EditorInfo.IME_ACTION_DONE ||
actionId == EditorInfo.IME_ACTION_NEXT) {
Log.i("focus",isUnderAge+"");
if(isUnderAge){
username_reg_ev_dob_row.setFocusableInTouchMode(true);
username_reg_ev_dob_row.requestFocus();
}else{
email_ev.requestFocus();
}
return true ; // NOW WORKS
// return false;
}
答案 1 :(得分:1)
你还需要两个xml属性来实现这个目标:
android:focusable="true"
android:focusableInTouchMode="true"
将它们添加到EditText以及父布局。默认情况下,这些都是false,因此不会将焦点放在请求的视图上。
来源:https://developer.android.com/reference/android/view/View.html#attr_android:focusable
根据复选框选择显示EditText后,在代码中动态添加下一个和前一个焦点。
希望这会有所帮助。