Como definir drawableRight programaticamente no Android Edittext?

86

Eu sei sobre definir drawableRight em XML. mas eu precisei fazê-lo programaticamente porque é alterado de acordo com alguma condição.

Sanket Kachhela
fonte
9
Use setCompoundDrawablesWithIntrinsicBounds () para EditText.
Piyush

Respostas:

261

Você pode usar a função abaixo:

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

ou (se você deseja passar o próprio drawable em vez de seu ID)

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

A ordem dos parâmetros correspondentes à localização do drawable é: esquerda, superior, direita, inferior

Lawrence Choy
fonte
1
como posso atribuir um ID a esse drawable? basicamente, quero adicionar um ouvinte de toque a esse drawable específico
Thorvald Olavsen
@Lawrence Choy oi senhor, como verificar se a imagem já saiu ou não. Por favor me ajude neste caso, e como alterar a cor da imagem.
Gowthaman M
8

Encontre mais aqui

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

Você também pode definir o preenchimento de drawable de maneira programática:

myEdit.setCompoundDrawablePadding("Padding value");
Retinavel
fonte
oi senhor, como verificar a imagem já saiu ou não. Por favor, ajude-me neste caso, e como alterar a cor da imagem
Gowthaman M
4

Tente como abaixo:

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

Editar:

 int img = R.drawable.smiley;
 EdtText.setCompoundDrawablesWithIntrinsicBounds( 0, 0, img, 0);
Sagar Maiyad
fonte
4

Experimentar:

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

Em seguida, você pode adicionar um ouvinte de toque a esse drawable específico.

misbahm3
fonte
2
int img = R.drawable.smiley;
editText.setCompoundDrawables( null, null, img, null );

Explicado aqui

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

Define os Drawables (se houver) para aparecerem à esquerda, acima, à direita e abaixo do texto. Use 0 se você não quiser um Drawable lá. Os limites dos Drawables serão ajustados aos seus limites intrínsecos.

Renjith Krishnan
fonte
2

Para mudar para a esquerda e para a direita de uma vez, uso esta linha única.

download.setCompoundDrawablesWithIntrinsicBounds( R.drawable.ic_lock_open_white_24dp, 0, R.drawable.ic_lock_open_white_24dp, 0);
abir-cse
fonte
1

Você pode usar sua visualização editText (aqui é txview) incorporada à função setCompoundDrawablesWithIntrinsicBounds () para fazer o que você está procurando

no meu código eu usei assim. txview.setCompoundDrawablesWithIntrinsicBounds (0,0, R.drawable.ic_arrow_drop_up, 0);

txview.setCompoundDrawablesWithIntrinsicBounds(left,top,right,bottom);
Paul Mathew
fonte
1
Você deve explicar seu código para ajudar o OP porque ele responde a sua pergunta.
Markus
0
        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);

            }
        });

Ocultar Drawable usando isto

et_feedback.setCompoundDrawablesWithIntrinsicBounds(0,0, 0, 0);
Keshav Gera
fonte
0

Se for necessário um drawable gráfico do Android, isso funcionará

Drawable dw = getApplicationContext().getResources().getDrawable(R.drawable.edit);
Button start = (Button)findViewById(R.id.buttonStart);
start.setCompoundDrawablesWithIntrinsicBounds(dw, null, null, null);
Margem
fonte