KeyCode_Enter到下一个edittext

时间:2010-06-11 03:09:37

标签: android android-edittext setfocus

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

6 个答案:

答案 0 :(得分:35)

您甚至不必使用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"
/>

解决了这个问题。

答案 1 :(得分:13)

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

tCNPCode.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if(keyCode == 66) {
            txtCNPCode.requestFocus();
        }
        return false;
    }
});

答案 2 :(得分:10)

最好的方法是使用inputType的其中一个选项,例如:android:inputType="textPersonName" 这将实现想要的效果。查看其他选项,它将为您节省一些时间:)

你不应该使用android:singleLine =“true”,因为它已被弃用。以下是有关文件的说明:

  

不推荐使用此属性,并将其替换为textMultiLine    inputType属性中的标志。改变现有时要小心    布局,因为singeLine的默认值为false(多行    mode),但如果为inputType指定任何值,则默认为    单线模式。 (如果singleLine和inputType属性都是    发现,inputType标志将覆盖singleLine的值。)。

答案 3 :(得分:6)

考虑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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

  

使用单行代码

my @a = 2 * @b;

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