Ich habe einige Symbole auf 4 Schaltflächen hinzugefügt, die neben der Schaltfläche so groß aussehen. Wie kann ich die Größe ändern? Ich habe drawableLeft auf den Schaltflächen verwendet, um Symbole hinzuzufügen.
Die Drawables heißen Deal, Trophäe, Puzzle und Megaphon. Die Symbole sind zu groß. Die Datei content_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/content_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="tr.k12.evrim.evrimnews.MainActivity"
tools:showIn="@layout/activity_main">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/frameLayout"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Giriş Yap"
android:onClick="SignIn"
android:textStyle="bold"
style="@style/Widget.AppCompat.Button.Colored"/>
</LinearLayout>
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_below="@id/frameLayout"
android:orientation="vertical">
<Button
android:text="Duyurular"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_below="@+id/frameLayout"
android:layout_centerHorizontal="true"
android:layout_marginTop="13dp"
android:id="@+id/button2"
android:drawableLeft="@drawable/megaphone" />
<Button
android:text="Kadromuz"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_below="@+id/button2"
android:layout_alignEnd="@+id/button2"
android:layout_marginTop="13dp"
android:id="@+id/button3"
android:drawableLeft="@drawable/puzzle"/>
<Button
android:text="Başarılarımız"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginTop="12dp"
android:id="@+id/button5"
android:drawableLeft="@drawable/trophy"/>
<Button
android:text="Ortaklarımız"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_marginTop="12dp"
android:id="@+id/button4"
android:drawableLeft="@drawable/deal"/>
</LinearLayout>
</RelativeLayout>
Antworten:
Wickeln Sie Ihre Ressource in ein Zeichen, das Ihre gewünschte Größe definiert, ähnlich wie:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/icon" android:width="@dimen/icon_size" android:height="@dimen/icon_size" /> </layer-list >
Verwenden Sie danach dieses Zeichen in Ihrem
android:drawableLeft
Tagquelle
Sie können Grenzen programmgesteuert festlegen ( hier ). Dies sieht folgendermaßen aus
Drawable img = ActivityName.this.getContext().getResources().getDrawable( R.drawable.blue_line); img.setBounds(left, top, right, bottom); button.setCompoundDrawables(img, null, null, null);
quelle
Versuche Folgendes. Deklarieren Sie die Drawables als die Symbole, die Sie verwenden möchten
Drawable drawable = getResources().getDrawable(R.mipmap.youricon); drawable.setBounds(0, 0, (int) (drawable.getIntrinsicWidth() * 0.6), (int) (drawable.getIntrinsicHeight() * 0.6)); ScaleDrawable sd = new ScaleDrawable(drawable, 0, 40, 40); youredittext1.setCompoundDrawables(null, null, sd.getDrawable(), null); drawable = getResources().getDrawable(R.mipmap.yourothericon); drawable.setBounds(0, 0, (int) (drawable.getIntrinsicWidth() * 0.6), (int) (drawable.getIntrinsicHeight() * 0.6)); sd = new ScaleDrawable(drawable, 0, 40, 40); youredittext2.setCompoundDrawables(null, null, sd.getDrawable(), null);
quelle
Hinzufügen zu DroidBenders großartiger Antwort. Seine Lösung stürzt auf API 21 nicht ab, sodass sie auch ohne Hinzufügen von
Build.VERSION.SDK_INT
Code verwendet werden kann. So sieht die Lösung mit einem Standard-Image-Asset auf API 21 aus (unter Verwendung der Texthöhe als Bemaßungseinstellung).Und so sieht es auf API 23+ aus
Es ist immer noch eine wirklich gute Option, auch wenn die min API <23 ist.
quelle
Verwenden einer Kotlin-Erweiterung:
Fügen Sie dies hinzu, um Ihren Code sauber und wiederverwendbar zu halten. Wenn Sie nichts oder 0 für id übergeben, wird das Drawable gelöscht. (Schaltfläche erweitert TextView)
buttonView.leftDrawable(R.drawable.my_icon, R.dimen.icon_size) // Button extends TextView fun TextView.leftDrawable(@DrawableRes id: Int = 0, @DimenRes sizeRes: Int) { val drawable = ContextCompat.getDrawable(context, id) val size = resources.getDimensionPixelSize(sizeRes) drawable?.setBounds(0, 0, size, size) this.setCompoundDrawables(drawable, null, null, null) }
quelle
Verwenden Sie einfach die MaterialButtons von Google: https://material.io/develop/android/components/buttons/
app:icon app:iconGravity app:iconPadding app:iconSize
quelle
Solange das Symbol ein Vektor-Asset ist, gehen Sie in die Vektordatei und ändern Sie
android:width
undandroid:height
zu etwas wie@dimen/icon_size
. Definieren Sie diese Ressource dann in Ihren dimension.xml-Dateien für mehrere Bildschirmgrößen. Klappt wunderbarquelle
Diese Lösung funktioniert in allen Anwendungsfällen, in denen Sie ein Vektorgrafiksymbol verwenden, und ist auch mit Versionen unter 23 kompatibel.
Öffnen Sie das Zeichen-Symbol in XML
Original Icon zeichnbar:
<vector android:height="24dp" android:tint="?attr/colorControlNormal" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M11,18h2v-2h-2v2zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM12,6c-2.21,0 -4,1.79 -4,4h2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2c0,2 -3,1.75 -3,5h2c0,-2.25 3,-2.5 3,-5 0,-2.21 -1.79,-4 -4,-4z"/> </vector>
Umschließen Sie nun Ihre Pfad-Tags mit dem Gruppen-Tag und fügen Sie die Attribute scaleX, scaleY, pivotX und pivotY in das Gruppen-Tag ein, um die Symbolgröße wie folgt zu verkleinern:
<vector android:height="24dp" android:tint="?attr/colorControlNormal" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <group android:scaleX="0.5" android:scaleY="0.5" android:pivotX="12" android:pivotY="12"> <path android:fillColor="@android:color/white" android:pathData="M11,18h2v-2h-2v2zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM12,6c-2.21,0 -4,1.79 -4,4h2c0,-1.1 0.9,-2 2,-2s2,0.9 2,2c0,2 -3,1.75 -3,5h2c0,-2.25 3,-2.5 3,-5 0,-2.21 -1.79,-4 -4,-4z"/> </group> </vector>
Sie können die Größe des Symbols steuern, indem Sie scaleX und scaleY ändern.
Dies ist nicht nur bei Drawables nützlich, sondern auch an jedem Ort, an dem ein Symbol verwendet wird und an dem es nicht einfach ist, Styling-Lösungen zu finden, um die Symbolgröße zu reduzieren, wie beispielsweise bei einem AlertDialogue.
quelle