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 numbers. Also +374
must be unchangeable, user can't change or remove it. So is there some kind of ways for doing this?
EDIT:
I don't want to use textView or another view with this text and put it left of the ediText. I want to find some way with less operations. I need text to be frozen not to check every text changes or add missing text when user will delete some part of it.
Use this code: editText. setEnabled(false); editText.
android:editable="false" should work, but it is deprecated, you should be using android:inputType="none" instead. Alternatively, if you want to do it in the code you could do this : EditText mEdit = (EditText) findViewById(R.
For the above requirement the solution in XML is android:editable="false" but I want to use this in Java. et. setKeyListener(null); It makes the EditText not EDITABLE but at the same time it makes it non clickable as well.
Create a custom drawable class that will help to convert text into drawable.
public class TextDrawable extends Drawable { private final String text; private final Paint paint; public TextDrawable(String text) { this.text = text; this.paint = new Paint(); paint.setColor(Color.BLACK); paint.setTextSize(16f); paint.setAntiAlias(true); paint.setTextAlign(Paint.Align.LEFT); } @Override public void draw(Canvas canvas) { canvas.drawText(text, 0, 6, paint); } @Override public void setAlpha(int alpha) { paint.setAlpha(alpha); } @Override public void setColorFilter(ColorFilter cf) { paint.setColorFilter(cf); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } }
Then set the drawable to left of the edittext as
EditText et = (EditText)findViewById(R.id.editText1); String code = "+374"; et.setCompoundDrawablesWithIntrinsicBounds(new TextDrawable(code), null, null, null); et.setCompoundDrawablePadding(code.length()*10);
Where the edittext is defined in the layout file as
<EditText android:id="@+id/editText1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="16sp" android:ems="10" > <requestFocus /> </EditText>
Final Output looks like
public class MainActivity extends Activity { private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText) findViewById(R.id.editText1); editText.setText("+374"); Selection.setSelection(editText.getText(), editText.getText().length()); editText.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) { if (!s.toString().startsWith("+374")) { editText.setText("+374"); Selection.setSelection(editText.getText(), editText .getText().length()); } } }); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With