0

したがって、3 つの EditText- ボックスがあり、ユーザーがそのうちの 1 つで Enter キーを押すと、次のボックスに移動したいと考えています。

私は試した:

final EditText email = (EditText) findViewById(R.id.editText1);
email.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
            (keyCode == KeyEvent.KEYCODE_ENTER)) {

            findViewById(R.id.editText2).requestFocus();
          return true;
        }
        return false;
    }
});


final EditText pass = (EditText) findViewById(R.id.editText2);
pass.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
            (keyCode == KeyEvent.KEYCODE_ENTER)) {

            findViewById(R.id.editText3).requestFocus();
          return true;
        }
        return false;
    }
});



final EditText passrep = (EditText) findViewById(R.id.editText3);
passrep.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
            (keyCode == KeyEvent.KEYCODE_ENTER)) {

            findViewById(R.id.button1).requestFocus();
          return true;
        }
        return false;
    }
});

しかし、このコードでは、キーボード入力時にフォーカスが editText1 から editText3 にジャンプします。

何が機能するかはこれです(偶然見つけました):

final EditText email = (EditText) findViewById(R.id.editText1);
email.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
            (keyCode == KeyEvent.KEYCODE_ENTER)) {

            findViewById(R.id.editText2).requestFocus();
          return true;
        }
        return false;
    }
});


final EditText pass = (EditText) findViewById(R.id.editText2);
email.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
            (keyCode == KeyEvent.KEYCODE_ENTER)) {

            findViewById(R.id.editText3).requestFocus();
          return true;
        }
        return false;
    }
});



final EditText passrep = (EditText) findViewById(R.id.editText3);
email.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
            (keyCode == KeyEvent.KEYCODE_ENTER)) {

            findViewById(R.id.button1).requestFocus();
          return true;
        }
        return false;
    }
});

たとえば、同じ EditText (電子メール) に対して 3 つの異なる OnKeyListeners をすべて設定します。

ここで何が欠けていますか?これは私のレイアウトです:

<EditText
    android:id="@+id/editText1"
    android:layout_width="234dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:ems="10"
    android:inputType="textEmailAddress"
    android:layout_marginTop="20dp"
    android:hint="Email" >

</EditText>

<EditText
    android:id="@+id/editText2"
    android:layout_width="234dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:ems="10"
    android:inputType="textPassword"
    android:layout_marginTop="20dp"
    android:hint="Password" />

<EditText
    android:id="@+id/editText3"
    android:layout_width="234dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:ems="10"
    android:inputType="textPassword"
    android:layout_marginTop="20dp"
    android:hint="Confirm Password" />

<Button
    android:id="@+id/button1"
    android:layout_width="123dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="35dp"
    android:text="@string/submit" />
4

1 に答える 1

2

実際にここで起こっていることは、焦点が合っているかどうかに関係なく、すべてEditTextのs が常に重要なイベントをリッスンしているということです。

OnEditorActionListenerDone/Enter/Go/Search キーに使用する必要があります

editText.setOnEditorActionListener(new OnEditorActionListener() {        
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if(actionId==EditorInfo.IME_ACTION_DONE){
            //do something
        }
    return false;
    }
});
于 2012-05-25T09:33:43.657 に答える