webentwicklung-frage-antwort-db.com.de

Wie programmiert man drawableLeft auf Android button?

Ich erstelle dynamisch Schaltflächen. Ich habe sie zuerst mit XML gestylt, und ich versuche, das folgende XML zu nehmen und es programmatisch zu gestalten.

<Button
    Android:id="@+id/buttonIdDoesntMatter"
    Android:layout_height="wrap_content"
    Android:layout_width="fill_parent"
    Android:text="buttonName"
    Android:drawableLeft="@drawable/imageWillChange"
    Android:onClick="listener"
    Android:layout_width="fill_parent">
</Button>

Das habe ich bisher. Ich kann alles außer dem Zeichnen.

linear = (LinearLayout) findViewById(R.id.LinearView);
Button button = new Button(this);
button.setText("Button");
button.setOnClickListener(listener);
button.setLayoutParams(
    new LayoutParams(
        Android.view.ViewGroup.LayoutParams.FILL_PARENT,         
        Android.view.ViewGroup.LayoutParams.WRAP_CONTENT
    )
);      

linear.addView(button);
396
user375566

Sie können dazu die Methode setCompoundDrawables verwenden. Siehe das Beispiel hier . Ich habe das ohne setBounds benutzt und es hat funktioniert. Sie können es so oder so versuchen.

[~ # ~] update [~ # ~] : Kopieren Sie den Code hierher, falls der Link ausfällt

Drawable img = getContext().getResources().getDrawable( R.drawable.smiley );
img.setBounds( 0, 0, 60, 60 );
txtVw.setCompoundDrawables( img, null, null, null );

oder

Drawable img = getContext().getResources().getDrawable( R.drawable.smiley );
txtVw.setCompoundDrawablesWithIntrinsicBounds( img, null, null, null);

oder

txtVw.setCompoundDrawablesWithIntrinsicBounds( R.drawable.smiley, 0, 0, 0);
946
Varun

Einfach kann man das auch probieren

txtVw.setCompoundDrawablesWithIntrinsicBounds(R.drawable.smiley, 0, 0, 0);
87

Bei mir hat es geklappt:

button.setCompoundDrawablesWithIntrinsicBounds(com.example.project1.R.drawable.ic_launcher, 0, 0, 0);
13
swapnil saha
myEdtiText.setCompoundDrawablesWithIntrinsicBounds( R.drawable.smiley,0, 0, 0);
12
gnganpath

Kotlin Version

Verwenden Sie das folgende Snippet, um der Schaltfläche einen Zeichenlink hinzuzufügen:

val drawable = ContextCompat.getDrawable(context, R.drawable.ic_favorite_white_16dp)
button.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null)

.

Important Point in Using Android Vector Drawable

Wenn Sie Android vector drawable verwenden und Abwärtskompatibilität für API unter 21 wünschen, fügen Sie den folgenden Code hinzu:

In App-Ebene build.gradle:

Android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}

In der Anwendungsklasse:

class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()

        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
    }

}
10
aminography

Ich tat dies:

 // Left, top, right, bottom drawables.
            Drawable[] drawables = button.getCompoundDrawables();
            // get left drawable.
            Drawable leftCompoundDrawable = drawables[0];
            // get new drawable.
            Drawable img = getContext().getResources().getDrawable(R.drawable.ic_launcher);
            // set image size (don't change the size values)
            img.setBounds(leftCompoundDrawable.getBounds());
            // set new drawable
            button.setCompoundDrawables(img, null, null, null);
4
user1564762

as @ Jérémy Reynaud weist darauf hin, dass, wie in diesem answer beschrieben, die Verwendung der vorherigen Werte die sicherste Methode ist, um das linke Zeichen zu setzen, ohne die Werte der anderen Zeichen (oben, rechts und unten) zu ändern von der Schaltfläche mit setCompoundDrawablesWithIntrinsicBounds :

Drawable leftDrawable = getContext().getResources()
                          .getDrawable(R.drawable.yourdrawable);

// Or use ContextCompat
// Drawable leftDrawable = ContextCompat.getDrawable(getContext(),
//                                        R.drawable.yourdrawable);

Drawable[] drawables = button.getCompoundDrawables();
button.setCompoundDrawablesWithIntrinsicBounds(leftDrawable,drawables[1],
                                               drawables[2], drawables[3]);

So bleiben alle Ihre bisherigen Zeichnungen erhalten.

Im Folgenden wird beschrieben, wie Sie die Farbe des linken Symbols im Bearbeitungstext ändern und auf der linken Seite festlegen.

 Drawable img = getResources().getDrawable( R.drawable.user );
img.setBounds( 0, 0, 60, 60 );
mNameEditText.setCompoundDrawables(img,null, null, null);

int color = ContextCompat.getColor(this, R.color.blackColor);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
    DrawableCompat.setTint(img, color);

} else {
    img.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
2
Rajneesh Shukla

Könnte hilfreich sein:

TextView location;
location=(TextView)view.findViewById(R.id.complain_location);
//in parameter (left,top,right,bottom) any where you wnat to put
location.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.arrow,0);
1

Hat für mich gearbeitet. Zum Zeichnen rechts einstellen

tvBioLive.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_close_red_400_24dp, 0)
1
Shaon

Wenn Sie drawableStart , drawableEnd , drawableTop oder drawableBottom ; Sie müssen "setCompoundDrawablesRelativeWithIntrinsicBounds" verwenden.

edittext.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, R.drawable.anim_search_to_close, 0)
1
Mete

Versuche dies:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                fillButton[i].setBackground(getBaseContext().getResources().getDrawable(R.drawable.drawable_name));
            }
else{
     fillButton[i].setBackgroundColor(Color.argb(255,193,234,203));

}
0
Maifee Ul Asad