Wie kann ich drawableRight programmgesteuert auf Android Edittext einstellen?

83

Ich weiß, wie man drawableRight in XML setzt. aber ich musste es programmgesteuert tun, weil es sich unter bestimmten Bedingungen ändert.

Sanket Kachhela
quelle
8
Verwenden Sie setCompoundDrawablesWithIntrinsicBounds () für EditText.
Piyush

Antworten:

253

Sie können die folgende Funktion verwenden:

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

oder (wenn Sie das Drawable selbst anstelle seiner ID übergeben möchten)

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

Die Reihenfolge der Parameter, die der zeichnbaren Position entsprechen, lautet: links, oben, rechts, unten

Lawrence Choy
quelle
1
Wie kann ich diesem Zeichnungsobjekt eine ID zuweisen? Grundsätzlich möchte ich diesem speziellen Drawable einen Touch-Listener hinzufügen
Thorvald Olavsen,
@ Lawrence Choy Hallo Herr, wie man prüft, ob das Bild bereits beendet ist oder nicht. Bitte helfen Sie mir in diesem Fall und wie man die Bildfarbe ändert.
Gowthaman M
8

Weitere Informationen finden Sie hier

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

Sie können die Zeichenpolsterung auch programmgesteuert einstellen:

myEdit.setCompoundDrawablePadding("Padding value");
Rethinavel
quelle
Hallo Herr, wie man prüft, ob das Bild bereits beendet ist oder nicht. Bitte helfen Sie mir in diesem Fall und wie man die
Bildfarbe
4

Versuchen Sie es wie folgt:

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

Bearbeiten:

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

Versuchen:

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

Anschließend können Sie diesem bestimmten Zeichenelement einen Touch-Listener hinzufügen.

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

erklärt hier

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

Legt fest, dass die Drawables (falls vorhanden) links, über, rechts und unter dem Text angezeigt werden. Verwenden Sie 0, wenn Sie dort kein Drawable möchten. Die Grenzen der Drawables werden auf ihre inneren Grenzen gesetzt.

Renjith Krishnan
quelle
1

Sie können Ihre in der Funktion setCompoundDrawablesWithIntrinsicBounds () integrierte editText-Ansicht (hier txview) verwenden, um das zu tun, wonach Sie suchen

In meinem Code habe ich es so benutzt. txview.setCompoundDrawablesWithIntrinsicBounds (0,0, R.drawable.ic_arrow_drop_up, 0);

txview.setCompoundDrawablesWithIntrinsicBounds(left,top,right,bottom);
Paul Mathew
quelle
1
Sie sollten Ihren Code erklären, um dem OP zu helfen, warum er seine Frage beantwortet.
Markus
1

Zum gleichzeitigen Ändern von links und rechts verwende ich diese einzelne Zeile.

download.setCompoundDrawablesWithIntrinsicBounds( R.drawable.ic_lock_open_white_24dp, 0, R.drawable.ic_lock_open_white_24dp, 0);
abir-cse
quelle
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);

            }
        });

Mit dieser Option Drawable ausblenden

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

Wenn Android-Grafiken gezeichnet werden müssen, funktioniert dies

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