Sanket Kachhela
Sanket Kachhela

Reputation: 10856

How to programmatically set drawableRight on Android Edittext?

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

Upvotes: 101

Views: 95458

Answers (10)

Nikhil S Marathe
Nikhil S Marathe

Reputation: 771

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.

Upvotes: -2

Lawrence Choy
Lawrence Choy

Reputation: 6108

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

Upvotes: 293

MarGin
MarGin

Reputation: 2518

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

Upvotes: 2

abir-cse
abir-cse

Reputation: 546

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

Upvotes: 3

Keshav Gera
Keshav Gera

Reputation: 11244

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

Upvotes: 2

Paul Mathew
Paul Mathew

Reputation: 11

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

Upvotes: 1

misbahm3
misbahm3

Reputation: 101

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.

Upvotes: 4

Renjith Krishnan
Renjith Krishnan

Reputation: 2616

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.

Upvotes: 2

Rethinavel
Rethinavel

Reputation: 3952

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

Upvotes: 10

Sagar Maiyad
Sagar Maiyad

Reputation: 12733

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

Upvotes: 4

Related Questions