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
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 ");