31

edittextで、「Enter」キーを入力した後、システムはその中に新しい行を作成します。次のエディットテキストに焦点を当てたいのですが、新しい行はありません。コーディング方法は?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

を使用する必要はありませんOnKeyListenerandroid: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"を追加することだけです。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のオプションの1つを使用することです。たとえば、次のようにandroid:inputType="textPersonName" なります。これにより、目的の効果が得られます。他のオプションもチェックしてください。将来的には時間を節約できます:)

android:singleLine = "true"は非推奨であるため、使用しないでください。ドキュメントには次のように書かれています。

この属性は非推奨になり、inputType属性のtextMultiLineフラグに置き換えられました。singeLineのデフォルト値はfalse(複数行モード)であるため、既存のレイアウトを変更する場合は注意が必要ですが、inputTypeに値を指定すると、デフォルトは単一行モードになります。(singleLine属性とinputType属性の両方が見つかった場合、inputTypeフラグはsingleLineの値をオーバーライドします。)

于 2012-01-09T09:33:24.510 に答える
2

1行のコードを使用する(Java)

tCNPCode.setSingleLine(true);

Kotlin

tCNPCode.isSingleLine = true

Enterキーを押すと次の項目に移動します

于 2019-09-27T13:51:59.913 に答える
1

EditTextxmlレイアウトファイル のボックスに最大行数を設定するだけです。android:maxLength="1"

于 2015-04-27T13:10:35.587 に答える