在edittext的开头附加文本

时间:2016-07-31 14:04:10

标签: android android-edittext addtextchangedlistener

如果用户开始输入文本,如何在edittext开头自动添加文本。例如,我想在用户开始输入电话号码时自动附加国家/地区代码。 我试过了 -

      mNumber.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
            mNumber.setText("+91"+editable.getText().toString());
            }
        });

但这不起作用,我输入edittext时我的设备就会挂起。

3 个答案:

答案 0 :(得分:4)

您导致无限循环,因为您从setText()呼叫afterTextChanged(),然后setText()正在呼叫afterTextChanged(),依此类推。依此类推。

您可以将afterTextChanged()更改为以下内容,

public void afterTextChanged(Editable s) {
    if(!s.toString().startsWith("+91")){
        s.insert(0, "+91");
    }
}

这样你就不会一直调用setText(),而且每次用户在EditText中键入内容时都会检查是否存在“+91”。这种方法的一个缺点是,一旦在输入开始时自动插入了退格键,就无法删除“+91”。

答案 1 :(得分:2)

你的应用程序挂起,因为mNumber.setText("...")再次触发你的addTextChangedListener(),又一次又一次......

您可以通过检查前缀是否已经设置来避免这种情况,如果不是前缀,则只需添加前缀。

public void afterTextChanged(Editable editable) {
    if (!mNumber.getText().startsWith("+91")) {
        mNumber.setText("+91"+mNumber.getText());
    }
}

答案 2 :(得分:1)

改善@ wanpanman的回答

ET.addTextChangedListener(new TextWatcher() {
            int count;
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }
            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                count=i2;
            }
            @Override
            public void afterTextChanged(Editable s) {
                if(!s.toString().startsWith("+91 ") && count!=0){
                    s.insert(0, "+91 ");
                }
            }
        });

count变量确保在删除+91的第一个实例时+91不会被添加两次。

当count = 0时,表示退格。