How to programmatically set drawableRight on Android Edittext?
Asked Answered
T

10

101

I know about set drawableRight in XML. but i required to do it programmatically because it is change as per some condition.

Tinhorn answered 10/3, 2014 at 10:3 Comment(1)
Use setCompoundDrawablesWithIntrinsicBounds() for EditText.Godgiven
L
292

You can use the function below:

editText.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.drawableRight, 0);

or (if you want to pass the drawable itself instead of its ID)

editText.setCompoundDrawablesWithIntrinsicBounds(null, null, ContextCompat.getDrawable(context,R.drawable.drawableRight), null)

The order of params corresponding to the drawable location is: left, top, right, bottom

Loganiaceous answered 10/3, 2014 at 10:5 Comment(2)
how can I assign an ID to that drawable ? basically I want to add a touch listener to that specific drawableModulate
@Lawrence Choy hi sir,how to check Image is already exit or not.Please help me in this case,And how to change image color.Overcharge
D
10

Find Further here

EditText myEdit = (EditText) findViewById(R.id.myEdit);
myEdit.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.icon, 0);  
// where params are (left,top,right,bottom)

You can also set drawable padding programmatically:

myEdit.setCompoundDrawablePadding("Padding value");
Dribble answered 10/3, 2014 at 10:6 Comment(1)
hi sir,how to check Image is already exit or not.Please help me in this case,And how to change image colorOvercharge
N
4

Try like below:

Drawable img = getContext().getResources().getDrawable( R.drawable.smiley );
EdtText.setCompoundDrawablesWithIntrinsicBounds( 0, 0, img, 0);

Edit :

 int img = R.drawable.smiley;
 EdtText.setCompoundDrawablesWithIntrinsicBounds( 0, 0, img, 0);
Necropolis answered 10/3, 2014 at 10:6 Comment(0)
P
4

Try:

EditText editFirstname = (EditText) findViewById(R.id.edit_fname);
Drawable icUser = getResources().getDrawable(R.drawable.ic_user);
editFirstname.setCompoundDrawablesWithIntrinsicBounds(null, null, icUser, null);

Then you can add a touch listener to that specific drawable.

Papeete answered 27/1, 2017 at 20:42 Comment(0)
P
3

For changing left and right both at a time I use this single line.

download.setCompoundDrawablesWithIntrinsicBounds( R.drawable.ic_lock_open_white_24dp, 0, R.drawable.ic_lock_open_white_24dp, 0);
Principality answered 10/2, 2018 at 21:33 Comment(0)
G
2
int img = R.drawable.smiley;
editText.setCompoundDrawables( null, null, img, null );

Explained here

setCompoundDrawablesWithIntrinsicBounds (int left, int top, int right, int bottom)

Sets the Drawables (if any) to appear to the left of, above, to the right of, and below the text. Use 0 if you do not want a Drawable there. The Drawables' bounds will be set to their intrinsic bounds.

Gerhard answered 10/3, 2014 at 10:9 Comment(0)
K
2
        et_feedback.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {

                }
              et_feedback.setCompoundDrawablesWithIntrinsicBounds(0,R.mipmap.feedback_new, 0, 0);                
               et_feedback.setTextColor(Color.BLACK);

            }
        });

Hide Drawable using this

et_feedback.setCompoundDrawablesWithIntrinsicBounds(0,0, 0, 0);
Kapor answered 1/11, 2017 at 7:11 Comment(0)
L
2

If it requires android graphics drawable then this will work

Drawable dw = getApplicationContext().getResources().getDrawable(R.drawable.edit);
Button start = (Button)findViewById(R.id.buttonStart);
start.setCompoundDrawablesWithIntrinsicBounds(dw, null, null, null);
Lauretta answered 24/9, 2018 at 9:44 Comment(0)
I
1

You can use your editText view (here it is txview) built in function setCompoundDrawablesWithIntrinsicBounds() to do what you are looking for

in my code I Used it like this . txview.setCompoundDrawablesWithIntrinsicBounds(0,0,R.drawable.ic_arrow_drop_up,0);

txview.setCompoundDrawablesWithIntrinsicBounds(left,top,right,bottom);
Intersection answered 21/7, 2017 at 6:55 Comment(1)
You should explain your code to help the OP why it answers his question.Parole
D
0

From XML layout use the belows line

  android:drawableStart="@drawable/ic_promocode"

From Kotlin or Java File

 etPromoCode.setStartDrawable(R.drawable.ic_promocode)

Done.☻♥ keep code.

Dutch answered 26/3 at 12:39 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.