如何通过编程方式在 Android Edittext 上设置 draableRight?

我知道用 XML 表示 set draableRight。但是我需要以编程的方式进行,因为它是根据某些条件进行更改的。

88827 次浏览

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

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

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

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.

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

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

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