web-dev-qa-db-ja.com

KeyCode_Enterから次の編集テキストへ

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;
        }
    });
27
soclose

requestFocus メソッドを使用する必要があります。あなたの場合、それは次のようなものになります:

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

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"
/>

問題を解決します。

36
Antek

最善の方法は、inputTypeのオプションの1つを使用することです。例:Android:inputType="textPersonName"これにより、必要な効果が得られます。他のオプションもチェックしてください。将来的には時間の節約になります:)

Android:singleLine = "true"は廃止されているため、使用しないでください。ドキュメントはそれについて言っています:

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

10
Stan

ここで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

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

1
user3811671

1行のコードを使用

tCNPCode.setSingleLine(true);

エンタープレスで次のアイテムに移動します

0
Mohsin kazi