31

在edittext中,输入“Enter”键后,系统会在其中创建一个新行。我想专注于下一个edittext,没有新行。如何编码?我在xml中的代码如下

    <EditText
    android:id="@+id/txtNPCode"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:layout_alignLeft="@+id/lblNPCode"
    android:layout_below="@+id/lblNPCode"
    android:layout_centerHorizontal="true"/>
<EditText
    android:id="@+id/txtCNPCode"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:layout_alignLeft="@+id/lblCNPCode"
    android:layout_below="@+id/lblCNPCode"
    android:layout_centerHorizontal="true"/>  

我还在 setOnKeyListener 中捕获了关键代码

   tCNPCode.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if(keyCode == 66) {
                Toast.makeText(S_PCode.this, "Enter Key", Toast.LENGTH_LONG).show();
                //tNPCode.setFocusable(true);
            }
            return false;
        }
    });
4

6 回答 6

38

你甚至不必使用OnKeyListener. 只需将行添加android:singleLine="true"到您的EditText. 此操作后EditText的行为完全符合您的要求。因此,在您的特定情况下:

<EditText
    android:id="@+id/txtNPCode"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:layout_alignLeft="@+id/lblNPCode"
    android:layout_below="@+id/lblNPCode"
    android:layout_centerHorizontal="true"
    android:singleLine="true"
/>
<EditText
    android:id="@+id/txtCNPCode"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:layout_alignLeft="@+id/lblCNPCode"
    android:layout_below="@+id/lblCNPCode"
    android:layout_centerHorizontal="true"
/>

解决问题。

于 2011-09-28T09:04:16.623 回答
18

你必须使用requestFocus方法。在您的情况下,它将类似于:

tCNPCode.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_ENTER) {
            txtCNPCode.requestFocus();
        }
        return false;
    }
});
于 2010-06-11T03:21:34.490 回答
10

考虑 IME 选项,这里有很好的描述http://androidcookbook.com/Recipe.seam;jsessionid=C824437B48F346E23FBE5828969029B4?recipeId=422和这里的文档http://developer.android.com/reference/android/widget/TextView.html#attr_android :imeOptions

您唯一需要的是在每个 EditText 上添加属性 android:imeOptions="actionNext"。键盘出现一个 Next 键,其中 Enter 曾经是,并允许导航到下一个 EditText。

但是“actionNext”的顺序是从上到下。例如,如果您有水平布局:

<LinearLayout android:orientation="horizontal" >
        <EditText android:id="@+id/et1" android:imeOptions="actionNext" />
        <EditText android:id="@+id/et2" android:imeOptions="actionNext" />
</LinearLayout>

et2永远不会得到焦点。您应该在代码中修复它:

et1.setOnEditorActionListener(new OnEditorActionListener()
{
    @Override
    public boolean onEditorAction(TextView v, int actionId,
            KeyEvent event)
    {
        switch (actionId)
        {
        case EditorInfo.IME_ACTION_NEXT:
            boolean result = false;
            TextView v1 = (TextView) v.focusSearch(View.FOCUS_RIGHT);
            if (v1 != null)
                result = v1.requestFocus(View.FOCUS_RIGHT);
            else if (!result)
            {
                v1 = (TextView) v.focusSearch(View.FOCUS_DOWN);
                if (v1 != null)
                    result = v1.requestFocus(View.FOCUS_DOWN);
            }
            if (!result)
                v.onEditorAction(actionId);
            break;

        default:
            v.onEditorAction(actionId);
            break;
        }
        return true;
    }
});

原文链接:https ://groups.google.com/forum/?fromgroups=#!topic/android-developers/OykOG6XtE8w

于 2013-02-12T09:30:15.263 回答
10

最好的方法是使用 inputType 的选项之一,例如:android:inputType="textPersonName" 这将达到想要的效果。也看看其他选项,它会在未来为你节省一些时间:)

您不应该使用 android:singleLine="true",因为它已被弃用。以下是文档中的说明:

此属性已弃用,并由 inputType 属性中的 textMultiLine 标志替换。更改现有布局时要小心,因为 singLine 的默认值为 false(多行模式),但如果您为 inputType 指定任何值,则默认值为单行模式。(如果同时找到 singleLine 和 inputType 属性,则 inputType 标志将覆盖 singleLine 的值。)。

于 2012-01-09T09:33:24.510 回答
2

使用单行代码 (Java)

tCNPCode.setSingleLine(true);

科特林

tCNPCode.isSingleLine = true

它将导航到按 Enter 键的下一个项目

于 2019-09-27T13:51:59.913 回答
1

只需将最大行数设置为EditTextxml 布局文件中的框: android:maxLength="1"

于 2015-04-27T13:10:35.587 回答