13

我有一个带有两个编辑文本的布局。当在第一个上按下回车键时,我需要将第二个设置为焦点和可编辑。我有设置焦点的代码,但是当第二个获得焦点时我无法开始输入。

PS我还需要edittext恰好是一个行高,而不能制作额外的行。它也有效。pss安卓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">

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;
            }
        });
4

5 回答 5

23

你多虑了。您可以直接在 XML 中指定 EditText 输入的顺序,而无需在 Java 中执行任何操作。

使用android:nextFocusDown参数指定当用户按下回车键时您希望获得焦点的字段。

于 2012-06-21T07:37:55.917 回答
12
android:inputType="text"
android:nextFocusDown="@+id/..."

为我工作

于 2013-07-19T08:28:22.203 回答
4

android:nextFocusDown 对我来说工作得很好但是只有在它的工作之后才删除以下方法:

editText1.setOnEditorActionListener(new EditText.OnEditorActionListener() {

 @Override

public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
      if (actionId == EditorInfo.IME_ACTION_DONE ||   
              actionId == EditorInfo.IME_ACTION_NEXT) {
         editText2.requestFocus();
         return false;
      }

      return false;
    }
});
于 2013-08-20T07:33:19.537 回答
4

除了在 id 前面添加 + 之外:

android:inputType="text"
android:nextFocusDown="@+id/..."

我还必须补充:

android:imeOptions="actionNext"
于 2016-10-16T22:09:06.517 回答
2

在模拟器上运行此代码时似乎有问题。但是,它适用于手机

于 2012-07-02T07:09:52.643 回答