Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set unchangeable some part of editText android

Tags:

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?enter image description here

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.

like image 736
Hayk Nahapetyan Avatar asked Nov 05 '13 11:11

Hayk Nahapetyan


People also ask

How do you make Uneditable text edits?

Use this code: editText. setEnabled(false); editText.

How do you make text not editable on android?

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.

How do you make EditText not editable and clickable?

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.


2 Answers

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

enter image description here

like image 166
Sunil Mishra Avatar answered Oct 24 '22 15:10

Sunil Mishra


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());              }          }      }); }  } 
like image 22
anand Avatar answered Oct 24 '22 14:10

anand