33

ここに画像の説明を入力

ユーザーは、編集テキストに 1 桁しか入力できません。彼が edtText1 に値を入力すると、カーソルが自動的に edtText2 に移動するようにします。ユーザーは、すでに入力したテキストを編集できます。私は次の方法を試しました。

    edtPasscode1.setOnKeyListener(new OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if (edtPasscode1.getText().length() == 1)
                edtPasscode2.requestFocus();
            return false;
        }
    });

    edtPasscode2.setOnKeyListener(new OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if (edtPasscode2.getText().length() == 1)
                edtPasscode3.requestFocus();
            return false;
        }
    });

    edtPasscode3.setOnKeyListener(new OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if (edtPasscode3.getText().length() == 1)
                edtPasscode4.requestFocus();
            return false;
        }
    });

ユーザーがテキストを編集すると、カーソルが他の editTexts に移動し、期待どおりに機能しません。上記を達成するにはどうすればよいですか?

4

9 に答える 9

44

onKeyListenerの代わりにTextWatcherを試す

パスワードを編集したい場合は、TextWatcherを使用すると、より多くの処理方法が提供されます。

編集:-

StringBuilder sb=new StringBuilder();

         edtPasscode1.addTextChangedListener(new TextWatcher() {
             public void onTextChanged(CharSequence s, int start, int before, int count) {
                 // TODO Auto-generated method stub
                 if(sb.length()==0&edtPasscode1.length()==1)
                 {
                     sb.append(s);
                     edtPasscode1.clearFocus();
                     edtPasscode2.requestFocus();
                     edtPasscode2.setCursorVisible(true);

                 }
             }

             public void beforeTextChanged(CharSequence s, int start, int count,
                     int after) {

                 if(sb.length()==1)
                 {

                     sb.deleteCharAt(0);

                 }

             }

             public void afterTextChanged(Editable s) {
                 if(sb.length()==0)
                 {

                     edtPasscode1.requestFocus();
                 }

             }
         });

この仕事を願っています。

于 2013-10-18T06:09:22.373 に答える
4

長さを edittxt に設定しandroid:maxLength="1"、以下のコードに従ってください

((EditText) findViewById(R.id.edi1)).addTextChangedListener(new TextWatcher() {
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            if(((EditText) findViewById(R.id.edi1)).getText().toString().length()==1)
            {
                ((EditText) findViewById(R.id.edi1)).clearFocus();
                ((EditText) findViewById(R.id.edi2)).requestFocus();
                ((EditText) findViewById(R.id.edi2)).setCursorVisible(true);

            }
        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }


    });

    ((EditText) findViewById(R.id.edi2)).addTextChangedListener(new TextWatcher() {
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            if(((EditText) findViewById(R.id.edi2)).getText().toString().length()==1)
            {
                ((EditText) findViewById(R.id.edi2)).clearFocus();
                ((EditText) findViewById(R.id.edi3)).requestFocus();
                ((EditText) findViewById(R.id.edi3)).setCursorVisible(true);

            }
        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }


    });


    ((EditText) findViewById(R.id.edi3)).addTextChangedListener(new TextWatcher() {
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            if(((EditText) findViewById(R.id.edi3)).getText().toString().length()==1)
            {
                ((EditText) findViewById(R.id.edi3)).clearFocus();
                ((EditText) findViewById(R.id.edi4)).requestFocus();
                ((EditText) findViewById(R.id.edi4)).setCursorVisible(true);

            }
        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }


    });
于 2013-10-18T06:15:58.027 に答える