当我没有在Android中设置nextFocusDown时,如何获得EditText的下一个焦点

时间:2017-08-08 18:07:32

标签: android android-edittext

<LinearLayout
            android:id="@+id/loginInputs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <EditText
                android:id="@+id/txtUsername"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:ems="10"
                android:hint="User Name"
                android:imeOptions="actionNext"
                android:text="" />

            <EditText
                android:id="@+id/txtPassword"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:ems="10"
                android:inputType="textPassword"
                android:text="" />
        </LinearLayout>

我希望在代码中获得txtUsername的下一个焦点。如果我设置了android:nextFocusDown属性,我可以使用txtUsername.getNextFocusDownId();来获取它。 (When softkey enter pressed focus moved to nextFocusDown)我想知道有没有任何方法可以在不设置焦点属性的情况下通过代码获得默认的下一个焦点。

通过将焦点属性设置为所有EditTexts,我可以获得相同的功能。但我觉得应该有更好的方法。

P.W。我想根据下一个焦点做一些逻辑。我不想改变焦点。

1 个答案:

答案 0 :(得分:0)

基于你的P.W.和你的问题评论,我建议使用View.OnFocusChangeListener

https://developer.android.com/reference/android/view/View.OnFocusChangeListener.html

将侦听器附加到EditText(或层次结构中可以获得焦点的任何其他视图)

txtUsername.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus)
            // do some logic here, removing focus if necessary
    }
});

这样,您可以对焦点更改事件进行字段处理,并处理您要执行的任何其他逻辑。您也可以从此对象中移除焦点,并在需要时将其设置在其他位置。

Android会尽力指导焦点,但在未定义焦点属性时,它并不完美。作为开发人员,我们的工作是填补空白并创造最佳的导航体验。

有关详细信息,请参阅Making Apps More Accessible