使用Android如何集中另一个EditText上时,点击退格

问题描述 投票:4回答:4

我试图让脚进入页面,我创建了4个EditTexts和我创建了一个功能,该数值低于我的活动。我的问题是,当我点击退格键,我想现在的EditText集中到前(后)的EditText,但关键听众不工作。

逻辑很简单,当用户输入一个号码的EditText,它losts聚焦和下一个的EditText越来越聚焦,则它进入这样。但问题是,当我点击后面的空间,我想回去的EditText之前再次输入号码。我试图插入的KeyListener beforeTextChange内但没有奏效。

 private void SetTextChange(final EditText etCurrent, final EditText etForward,final EditText etBack, final boolean isLast, final int currentPosition)
{

    etCurrent.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            if (etCurrent.getText().length() == 1 && !isLast ) {
                etCurrent.setTypeface(null, Typeface.NORMAL);
                etCurrent.clearFocus();
                etForward.requestFocus();
                etForward.setCursorVisible(true);

                etCurrent.getBackground().setColorFilter(getResources().getColor(R.color.lavender_indigo), PorterDuff.Mode.SRC_ATOP);
            } else if (etCurrent.length() == 0) {
                etCurrent.getBackground().setColorFilter(getResources().getColor(R.color.french_gray), PorterDuff.Mode.SRC_ATOP);
                etCurrent.setTypeface(null, Typeface.SANS_SERIF.getStyle());

                etCurrent.setTypeface(null, Typeface.NORMAL);
                etCurrent.clearFocus();
                etBack.requestFocus();
                etBack.setCursorVisible(true);

            }


            if (etCurrent.length() != 0) {
                Integer currentKey = Integer.parseInt(etCurrent.getText().toString());
                keyList.set(currentPosition, currentKey);
            } else
                keyList.set(currentPosition, -1);

            if (keyList.size() > 3)
                showToast(keyList.get(0) + " " + keyList.get(1) + " " + keyList.get(2) + " " + keyList.get(3));

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    /*curText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        public void onFocusChange(View arg0, boolean arg1) {
            curText = etCurrent;
            backText = etBack;
            curText.setText("");
        }

        });*/
    }

这也是我的EditText示例XML的一个。(其它都一样)

  <EditText
        android:layout_column="1"
        android:layout_columnWeight="1"
        android:id="@+id/etActivationDigit1"
        android:layout_width="70dp"
        android:layout_height="wrap_content"
        android:textSize="80dp"
        android:textAlignment="center"
        android:gravity="center_horizontal"
        android:hint="*"
        android:textColorHint="@color/french_gray"
        android:backgroundTint="@color/french_gray"
        android:fontFamily="sans-serif"
        android:textColor="@color/perfume"
        android:maxLength="1"
        android:inputType="number"
         />

我只是想擦除和焦点放回当用户输入错误的号码。注意:当您填写所有内容,你会看到,你可以删除,回去,但我想回去的PIN码中。谢谢。

  etCurrent.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {

            if(etCurrent.getText().toString() == "" && keyCode == event.KEYCODE_DEL)
            {
                etCurrent.setText("");
                etCurrent.clearFocus();
                etBack.requestFocus();
                etBack.setText("");
            }
            return false;
        }
    });

我的退格听者不触发,当我触摸退格键,但它触发所有其它字符。

android
4个回答
2
投票

这是我的4位数的PIN码活动什么工作。

private void setupInputListeners() {
    verificationCode1EditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s.length() == 1) {
                verificationCode2EditText.requestFocus(View.FOCUS_DOWN);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

    verificationCode2EditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(count == 0) {
                verificationCode1EditText.requestFocus(View.FOCUS_DOWN);
            } else {
                if (s.length() == 1) {
                    verificationCode3EditText.requestFocus(View.FOCUS_DOWN);
                }
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

    verificationCode3EditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(count == 0) {
                verificationCode2EditText.requestFocus(View.FOCUS_DOWN);
            } else {
                if (s.length() == 1) {
                    verificationCode4EditText.requestFocus(View.FOCUS_DOWN);
                }
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });

    verificationCode4EditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(count == 0) {
                verificationCode3EditText.requestFocus(View.FOCUS_DOWN);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    });
}

1
投票

只需在您的EDITTEXT onTextChanged方法中添加以下代码

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(yourEditText.length()==0){
                priviousEditText.requestFocus();
            }
}

0
投票

看看这个。 MainActivity.java

    public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText one = (EditText) findViewById(R.id.edtOne);
        final EditText two = (EditText) findViewById(R.id.edtTwo);
        final EditText three = (EditText) findViewById(R.id.edtThree);
        final EditText four = (EditText) findViewById(R.id.edtFour);

        one.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                // TODO Auto-generated method stub

            }

            @Override
            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

            }
        });
        two.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                if(s.toString().trim().length() == 0){
                    one.requestFocus();
                    one.setSelection(one.getText().toString().length());
                }

            }

            @Override
            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

            }
        });
        three.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                if(s.toString().trim().length() == 0){
                    two.requestFocus();
                    two.setSelection(two.getText().toString().length());
                }

            }

            @Override
            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

            }
        });
        four.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                if(s.toString().trim().length() == 0){
                    three.requestFocus();
                    three.setSelection(three.getText().toString().length());
                }

            }

            @Override
            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

            }
        });


    }


}

//使用此代码作为参考。

customDialog.setOnKeyListener(new OnKeyListener() {

            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {

                if (event.getAction() != KeyEvent.ACTION_DOWN) {
                    if (keyCode == KeyEvent.KEYCODE_BACK) {
                        customDialog.dismiss();
                        HomeActivity.this.finish();
                    } else if (keyCode == KeyEvent.KEYCODE_DEL) {
                        if (!pin3.getText().toString().equals("")) {
                            pin3.setText("");
                            pin3.requestFocus();
                        } else if (!pin2.getText().toString().equals("")) {
                            pin2.setText("");
                            pin2.requestFocus();
                        } else if (!pin1.getText().toString().equals("")) {
                            pin1.setText("");
                            pin1.requestFocus();
                        }
                    }
                }
                return true;
            }
        });
        return customDialog;

我在我的应用程序中使用此代码,它的工作原理完全。

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <EditText
        android:id="@+id/edtOne"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text="0" />
    <EditText
        android:id="@+id/edtTwo"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text="2" />
    <EditText
        android:id="@+id/edtThree"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text="3" />
    <EditText
        android:id="@+id/edtFour"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:text="4" />

</LinearLayout>

0
投票
    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {


    if (keyCode == KeyEvent.KEYCODE_DEL) {
        if (mPineighthDigitEditText.getText().length() ==0 )
        {       //mPineighthDigitEditText.setText("");
            mPinseventthDigitEditText.requestFocus();
    }
          if (mPinseventthDigitEditText.getText().length() == 0){
           // mPinseventthDigitEditText.setText("");
            mPinsixthDigitEditText.requestFocus();}
          if (mPinsixthDigitEditText.getText().length() == 0) {
           // mPinsixthDigitEditText.setText("");
            mPinFifthDigitEditText.requestFocus();}
         if (mPinFifthDigitEditText.getText().length() == 0){
            //mPinFifthDigitEditText.setText("");
            mPinForthDigitEditText.requestFocus();}
         if (mPinForthDigitEditText.getText().length() == 0){
           // mPinForthDigitEditText.setText("");
            mPinThirdDigitEditText.requestFocus();}
          if (mPinThirdDigitEditText.getText().length() == 0){
            //mPinThirdDigitEditText.setText("");
          mPinSecondDigitEditText.requestFocus();}
         if (mPinSecondDigitEditText.getText().length() == 0){
            //mPinSecondDigitEditText.setText("");
            mPinFirstDigitEditText.requestFocus();}
          if (mPinFirstDigitEditText.getText().length() == 0 ) {
              mPinFirstDigitEditText.setText("");
          }
        return true;
    }

    return super.onKeyDown(keyCode, event);


}

}

如果有多个编辑短信申请的谢谢:)


-1
投票

只要在这里像下面使用StringBuilder,并说明EDITTEXT你想专注于退格键:

StringBuilder sb = new StringBuilder(); //define this inside addTextChangedListner 

public void afterTextChanged (Editable s) {
    if (sb.length() == 0) {
        previousEditText.requestFocus();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.