【问题标题】:EditText´s android:nextFocusDown attibute stops working when onClick is setEditText 的 android:nextFocusDown 属性在设置 onClick 时停止工作
【发布时间】:2011-12-21 03:22:25
【问题描述】:

有谁知道为什么当我们设置 onClick 时 android:nextFocusDown 属性停止工作?

在下面的示例中,我们定义了一些带有此属性的 EditText:

<TableRow
android:weightSum="1"
android:gravity="center">
<EditText
    android:id="@+id/txtChave1"
    android:maxLength="4"
    android:gravity="center"
    android:textSize="16dp"
    android:layout_height="wrap_content"
    android:layout_weight=".23"
    android:layout_width="0dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:singleLine="true"
    android:selectAllOnFocus="true"
    android:inputType="textCapCharacters"
    android:nextFocusDown="@+id/txtChave2"></EditText>

<EditText
    android:id="@+id/txtChave2"
    android:maxLength="4"
    android:gravity="center"
    android:textSize="16dp"
    android:layout_height="wrap_content"
    android:layout_weight=".23"
    android:layout_width="0dp"
    android:layout_marginRight="5dp"
    android:singleLine="true"
    android:selectAllOnFocus="true"
    android:inputType="textCapCharacters"
    android:nextFocusDown="@+id/txtChave3"></EditText>

<EditText
    android:id="@+id/txtChave3"
    android:maxLength="4"
    android:gravity="center"
    android:textSize="16dp"
    android:layout_height="wrap_content"
    android:layout_weight=".23"
    android:layout_width="0dp"
    android:layout_marginRight="5dp"
    android:singleLine="true"
    android:selectAllOnFocus="true"
    android:inputType="textCapCharacters"
    android:nextFocusDown="@+id/txtChave4"></EditText>

<EditText
    android:id="@+id/txtChave4"
    android:maxLength="4"
    android:gravity="center"
    android:textSize="16dp"
    android:layout_height="wrap_content"
    android:layout_weight=".23"
    android:layout_width="0dp"
    android:layout_marginRight="5dp"
    android:singleLine="true"
    android:selectAllOnFocus="true"
    android:inputType="textCapCharacters"></EditText>
</TableRow>

如上所定义,当用户点击虚拟键盘上的“下一步按钮”时,焦点会按预期改变...但是,如果我们设置 onClick 属性,android:nextFocusDown 会发生变化不再工作了。

<EditText
android:id="@+id/txtChave1"
android:maxLength="4"
android:gravity="center"
android:textSize="16dp"
android:layout_height="wrap_content"
android:layout_weight=".23"
android:layout_width="0dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:singleLine="true"
android:selectAllOnFocus="true"
android:inputType="textCapCharacters"
android:nextFocusDown="@+id/txtChave2"
android:onClick="onClickHandler">
</EditText>

有什么建议吗?

非常感谢!

【问题讨论】:

  • 要么我不知道“下一步按钮”是什么,要么今天每个有焦点问题的代码都可以从提供的示例中运行!您的代码适用于我的模拟器。不好意思问了,但是你已经定义了一个带有签名 public void onClickHandler(View view) 的方法,对吧?
  • 嗨@hovanessyan,感谢您的评论。 “下一个按钮”是指虚拟键盘上的“输入按钮”。 onClickHandler 的签名也如你所说。请试一试。在您的模拟器上,在没有公共 onClickHandler 的情况下运行代码,按下“下一步按钮”。一切都应该工作。之后,将 onClickHandler 放在所有 EditTexts 上,并尝试使用“下一步按钮”在它们之间导航。您会注意到焦点不会按预期更改到下一个 EditText。有什么建议吗?谢谢!
  • 好的,所以对于临时解决方案,您不能以编程方式定义 onClick 侦听器并继续吗?
  • 实际上你为什么要在 EditText 上有一个 onClick 处理程序?
  • 嗨@hovanessyan!应该在过滤器上使用两个 EditText。但是,过滤器应该使用一个或其他字段的内容来执行。因此,如果用户单击第二个 EditText,则应清除第一个。如果用户点击第一个,第二个也应该被清理。谢谢!

标签: android android-layout android-edittext


【解决方案1】:

以编程方式进行,因为当您在 XML 中调用 android:nextFocusDown 时,您要在 nextFocus 中调用的对象可能不会创建它。

private void setUpView(){
    editText1=(EditText)findViewById(R.id.editText1);
    editText2=(EditText)findViewById(R.id.editText2);
    editText3=(EditText)findViewById(R.id.editText3);
}

private void setUpFocus(){
    editText1.setNextFocusDownId(R.id.editText2);
    editText2.setNextFocusDownId(R.id.editText8);// you can give focus to any id
    editText3.setNextFocusDownId(R.id.editText9);
}

setUpFocus() 之前在onCreate() 中调用setUpView()

【讨论】:

  • 干得好。它解决了我的问题。我用xml对其进行了编码,但它不起作用。但它通过在 .java/.kt 文件中编码来工作。
【解决方案2】:

最近遇到了同样的问题,发现用setOnTouchListener代替setOnClickListener就可以了。根据您的需要,在 onTouch 方法中使用 MotionEvent.ACTION_DOWN 或 MotionEvent.ACTION_UP。也不要忘记为也必须由系统处理的事件返回 FALSE(如果您想安全,请始终返回 false)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多