Set unchangeable some part of editText android

前端 未结 5 865
青春惊慌失措
青春惊慌失措 2020-11-30 01:03

I have some EditText for mobile number input. App must add unique text for every country. For example for Armenia is must add +374 , and user must fill other nu

5条回答
  •  無奈伤痛
    2020-11-30 01:49

    you can create class extend AppCompatEditText or EditText.

    public class CEditTextMaster extends AppCompatEditText {
    
            private boolean isNeedNoChangeSomeCharacters;
            private String charactersNoChange;
    
            public CEditTextMaster(Context context) {
                super(context);
                init(context, null);
            }
    
            public CEditTextMaster(Context context, AttributeSet attrs) {
                super(context, attrs);
                init(context, attrs);
            }
    
            public CEditTextMaster(Context context, AttributeSet attrs, int defStyleAttr) {
                super(context, attrs, defStyleAttr);
                init(context, attrs);
            }
    
            public void init(Context context, @Nullable AttributeSet attrs) {
    
                if (isInEditMode())
                    return;
    
                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) {
    
                    }
    
                    @Override
                    public void afterTextChanged(Editable s) {
                        if (isNeedNoChangeSomeCharacters && charactersNoChange != null) {
                            if (!getText().toString().startsWith(charactersNoChange)) {
                                removeTextChangedListener(this);
                                if (charactersNoChange.length() > s.length()) {
                                    setText(charactersNoChange);
                                } else {
                                    setText(charactersNoChange + getText());
                                }
                                setSelection(getText().toString().length());
                                addTextChangedListener(this);
                            }
                        }
                    }
                });
    
            }
    
            @Override
            protected void onSelectionChanged(int selStart, int selEnd) {
                if (isNeedNoChangeSomeCharacters && charactersNoChange != null) {
                    if (length() > charactersNoChange.length() && selStart < charactersNoChange.length()) {
                        setSelection(charactersNoChange.length(),selEnd);
                    }
                }
            }
    
    
            @Override
            public void setText(CharSequence text, BufferType type) {
                super.setText(text, type);
                if (isNeedNoChangeSomeCharacters && charactersNoChange != null) {
                    if (!getText().toString().trim().startsWith(charactersNoChange)) {
                        setText(charactersNoChange + getText());
                    }
                }
            }
    
            public void setCharactersNoChangeInitial(String charactersNoChange) {
                isNeedNoChangeSomeCharacters = true;
                this.charactersNoChange = charactersNoChange;
                if (!getText().toString().trim().startsWith(charactersNoChange)) {
                    setText(getText());
                }
            }
    
    }
    

    for use:

    edt.setCharactersNoChangeInitial("+734 ");
    

提交回复
热议问题