Wie kann ich das Zeichen auf einem Knopf verkleinern? Das Symbol ist zu groß, tatsächlich höher als die Schaltfläche. Dies ist der Code, den ich verwende:
<Button
android:background="@drawable/red_button"
android:drawableLeft="@drawable/s_vit"
android:id="@+id/ButtonTest"
android:gravity="left|center_vertical"
android:text="S-SERIES CALCULATOR"
android:textColor="@android:color/white"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"
android:drawablePadding="10dp">
</Button>
Das obere ist, wie es aussehen sollte, das untere, wie es jetzt aussieht.
Ich habe es versucht, aber es wird kein Bild angezeigt. :-(
Resources res = getResources();
ScaleDrawable sd = new ScaleDrawable(res.getDrawable(R.drawable.s_vit), 0, 10f, 10f);
Button btn = (Button) findViewById(R.id.ButtonTest);
btn.setCompoundDrawables(sd.getDrawable(), null, null, null);
Antworten:
Sie sollten ein verwenden Image und das Bild angeben
android:src
, und Satzandroid:scaletype
zufitXY
Einstellung skalierbar im Code zeichnbar
quelle
drawable.setBounds(0, 0, drawable.getIntrinsicWidth()*0.5, drawable.getIntrinsicHeight()*0.5);
Ich habe eine sehr einfache und effektive XML-Lösung gefunden, die nicht erforderlich ist
ImageButton
Erstellen Sie eine zeichnbare Datei für Ihr Bild wie unten und verwenden Sie sie für
android:drawableLeft
Sie können die Bildgröße mit
android:width
undandroid:height
Eigenschaften einstellen .Auf diese Weise können Sie mindestens die gleiche Größe für verschiedene Bildschirme erhalten.
Der Nachteil ist, dass es nicht genau wie fitXY ist, das die Bildbreite auf X skaliert und die Bildhöhe entsprechend skaliert.
quelle
android:drawableTop
das neue Zeichen hinzugefügt. Egal welche Werte für die Breite / Höhe ich eingestellt habe, es zeigt mir den Standardwert.Schaltflächen ändern nicht die Größe ihrer inneren Bilder.
Meine Lösung erfordert keine Code-Manipulation.
Es verwendet ein Layout mit TextView und ImageView.
Der Hintergrund des Layouts sollte die rote 3D-Zeichnung haben.
Möglicherweise müssen Sie das XML-Attribut android: scaleType definieren .
Beispiel:
Übrigens:
Viel Glück
quelle
Verwenden Sie ein ScaleDrawable, wie von Abhinav vorgeschlagen.
Das Problem ist, dass das Drawable dann nicht angezeigt wird - es ist eine Art Fehler in ScaleDrawables. Sie müssen das "Level" programmgesteuert ändern. Dies sollte für jede Schaltfläche funktionieren:
quelle
Mein DiplayScaleHelper, das funktioniert perfekt:
quelle
Sie können
setBounds
die "zusammengesetzten" Zeichen aufrufen, um die Größe des Bildes zu ändern.Versuchen Sie diesen Code, um die Zeichnungsgröße Ihrer Schaltfläche automatisch zu ändern:
definiert durch diese Funktion:
Beachten Sie, dass dies möglicherweise nicht
onCreate()
für eine Aktivität aufgerufen wird , da Höhe und Breite der Schaltflächen dort (noch) nicht verfügbar sind. Rufen Sie dies aufonWindowFocusChanged()
oder verwenden Sie diese Lösung , um die Funktion aufzurufen.Bearbeitet:
Die erste Inkarnation dieser Funktion funktionierte nicht richtig. Es wurde userSeven7s Code verwendet, um das Bild zu skalieren, aber die Rückgabe
ScaleDrawable.getDrawable()
scheintScaleDrawable
für mich nicht zu funktionieren (und auch nicht ).Der geänderte Code verwendet
setBounds
, um die Grenzen für das Bild bereitzustellen. Android passt das Bild in diese Grenzen.quelle
onCreate()
.Wenn Sie 1 Bild verwenden und in einer anderen Größe anzeigen möchten, können Sie die skalierbare Skala verwenden ( http://developer.android.com/guide/topics/resources/drawable-resource.html#Scale ).
quelle
Ich mache es wie unten. Dadurch wird unabhängig vom Eingabebild ein Bild mit einer Größe von 100 x 100 in der Schaltfläche erstellt.
Auch nicht verwenden
ScaleDrawable
. Nicht verwendet hatbutton.setCompoundDrawablesRelativeWithIntrinsicBounds()
mein Problem gelöst, da dies anscheinend intrinsische Grenzen (Quellbildgröße) anstelle der gerade festgelegten Grenzen verwendet.quelle
Sie können Zeichenelemente unterschiedlicher Größe verwenden, die mit unterschiedlichen Bildschirmdichten / -größen usw. verwendet werden, damit Ihr Bild auf allen Geräten richtig aussieht.
Siehe hier: http://developer.android.com/guide/practices/screens_support.html#support
quelle
Haben Sie versucht, Ihr Bild in ein ScaleDrawable zu verpacken und es dann in Ihrer Schaltfläche zu verwenden?
quelle
ScaleDrawable
wäre perfekt, aber es funktioniert einfach nicht. Es scheint etwas mit "Levels" zu tun zu haben. Weitere Informationen hier (und einige Problemumgehungen, die nicht perfekt sind): stackoverflow.com/questions/5507539/…Hier die Funktion, die ich zum Skalieren von Vektorzeichnungen erstellt habe. Ich habe es zum Festlegen der zusammensetzbaren TextView-Verbindung verwendet.
quelle
Mit der Funktion "BATCH DRAWABLE IMPORT" können Sie eine benutzerdefinierte Größe importieren, abhängig von Ihrem Anforderungsbeispiel 20dp * 20dp
Verwenden Sie nun nach dem Import das importierte drawable_image als drawable_source für Ihre Schaltfläche
Auf diese Weise ist es einfacher
quelle
Es ist, weil du es nicht getan hast
setLevel
. Nach IhnensetLevel(1)
wird es angezeigt, wie Sie möchtenquelle
Kotlin-Erweiterung verwenden
Ich schlage vor, eine Erweiterungsfunktion in TextView zu erstellen ( Button erweitert sie ), um sie einfach wiederverwenden zu können.
quelle
Ich habe die Techniken dieses Beitrags ausprobiert, fand aber keine davon so attraktiv. Meine Lösung bestand darin, eine Bildansicht und eine Textansicht zu verwenden und die Bildansicht oben und unten an der Textansicht auszurichten. Auf diese Weise habe ich das gewünschte Ergebnis erzielt. Hier ist ein Code:
quelle
Ich habe eine benutzerdefinierte Schaltflächenklasse erstellt, um dies zu erreichen.
CustomButton.java
attrs.xml
Verwendung in XML
quelle
Canvas
IngetResizedDrawable
und zeichnen es ein, wenn Sie nichts damit anfangen wollen? Die ganze Funktion könnte nur auf reduziert werdendrawable.setBounds(0, 0, mWidth, mHeight)
.