在KEY_DOWN上设置焦点和可编辑的下一个EditText

use*_*299 14 android android-layout

我有一个带有两个editexts的布局.我需要设置第二个焦点,并在第一个点击输入键时进行编辑.我有设置焦点的代码但是当第二个获得焦点时我无法开始输入.

PS我还需要edittext正好一行高,不可能制作附加行.它也有效.pss android 2.3

XML代码:

<EditText
            android:id="@+id/email"
            style="@style/profileLoginInput"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" android:hint="@string/email" android:ems="10" android:lines="1" android:maxLines="1" android:ellipsize="end">

            <requestFocus />
        </EditText>

<EditText
            android:id="@+id/password"
            style="@style/profileLoginInput"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:ems="10"
            android:inputType="textPassword" android:hint="@string/password">
Run Code Online (Sandbox Code Playgroud)

Java代码:

((EditText) findViewById(R.id.email)).setOnKeyListener(new OnKeyListener(){
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event)
            {
                if (event.getAction() == KeyEvent.ACTION_DOWN)
                {
                    switch (keyCode)
                    {
                        case KeyEvent.KEYCODE_DPAD_CENTER:
                        case KeyEvent.KEYCODE_ENTER:
                        ((EditText) findViewById(R.id.password)).requestFocus();
                        return true;
                        default:
                            break;
                    }
                }
                return false;
            }
        });
Run Code Online (Sandbox Code Playgroud)

Gen*_* S. 24

你是在思考这个问题.您可以在XML中指定EditText输入的顺序,而无需在Java中执行任何操作.

使用android:nextFocusDown参数指定当用户点击回车键时您想要获得焦点的字段.

  • 试试`android:nextFocusForward ="@ + id/editText2"`.还要确保,它不是一个多行的EditText. (5认同)
  • 我用过`editText.setNextFocusDownId(R.id.editText1);` (2认同)

Mat*_*s H 11

android:inputType="text"
android:nextFocusDown="@+id/..."
Run Code Online (Sandbox Code Playgroud)

为我工作


use*_*299 2

在模拟器上运行此代码时似乎出现了错误。不过,它可以在手机上运行