Die Bilder (Symbole) haben ungefähr die gleiche Größe, aber ich muss ihre Größe ändern, damit die Schaltflächen dieselbe Höhe haben.
Wie mache ich das?
Button button = new Button(this);
button.setText(apiEventObject.getTitle());
button.setOnClickListener(listener);
/*
* set clickable id of button to actual event id
*/
int id = Integer.parseInt(apiEventObject.getId());
button.setId(id);
button.setLayoutParams(new LayoutParams(
android.view.ViewGroup.LayoutParams.FILL_PARENT,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
Drawable drawable = LoadImageFromWebOperations(apiSizeObject.getSmall());
//?resize drawable here? drawable.setBounds(50, 50, 50, 50);
button.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
setCompoundDrawables()
? Intrinsic bezieht sich auf die ursprüngliche Bildgröße an anderen Stellen in Android, zDrawable.getIntrinsicHeight()
.Antworten:
Die
setBounds()
Methode funktioniert nicht für jeden Containertyp (hat jedoch für einige meiner Container funktioniertImageView
).Versuchen Sie die folgende Methode, um das Zeichen selbst zu skalieren:
quelle
ContextCompat.getDrawable(context, resourceid)
StateListDrawable
programmgesteuert erstellen und dieaddState
Methode mit diesem "konvertierten Zeichen" verwenden, damit es fürselector's item
die in verwendete Größe funktioniertsetPasswordVisibilityToggleDrawable
.Geben Sie die Größe mit an
setBounds()
, dh für eine Verwendung im Format 50 x 50quelle
setCompoundDrawables()
Funktion auf.Versuchen Sie vor dem Anwenden von .setBounds (..), das aktuelle Drawable in ScaleDrawable zu konvertieren
nachdem
wird funktionieren
quelle
ScaleDrawable
bietet eine Alternative zur Nichtverpackung?Ich hatte keine Zeit zu graben, warum die setBounds () -Methode nicht wie erwartet mit Bitmap Drawable funktioniert, aber ich habe eine kleine optimierte @ androbean-Studio-Lösung, um das zu tun, was setBounds tun sollte ...
Verwendung:
Ergebnisse
vorher: nachher:
quelle
Benutzen
Ihre minSdkVersion sollte 17 in build.gradle sein
So ändern Sie die Zeichengröße:
quelle
Verwenden Sie die Post-Methode, um den gewünschten Effekt zu erzielen:
quelle
Wahrscheinlich etwas spät. Aber hier ist die Lösung, die endlich in jeder Situation für mich funktioniert hat.
Die Idee ist, ein benutzerdefiniertes Zeichenobjekt mit fester innerer Größe zu erstellen und den Zeichenauftrag an das ursprüngliche Zeichenelement weiterzugeben.
quelle
Sie können eine Unterklasse des Ansichtstyps erstellen und die onSizeChanged-Methode überschreiben.
Ich wollte in meinen Textansichten zusammengesetzte Drawables skalieren, ohne dass ich mit dem Definieren von Bitmap-Drawables in XML usw. herumspielen musste, und tat dies folgendermaßen:
(Beachten Sie, dass ich w zweimal verwendet habe, nicht h, da ich in diesem Fall das Symbol über dem Text platziert habe und das Symbol daher nicht die gleiche Höhe wie die Textansicht haben sollte.)
Dies kann auf Hintergrundzeichnungen oder auf alles andere angewendet werden, dessen Größe Sie relativ zu Ihrer Ansichtsgröße ändern möchten. onSizeChanged () wird beim ersten Erstellen der Ansicht aufgerufen, sodass Sie keine Sonderfälle zum Initialisieren der Größe benötigen.
quelle
Die Antwort von jkhouw1 ist richtig, aber es fehlen einige Details, siehe unten:
Zumindest für API> 21 ist dies viel einfacher. Angenommen, wir haben VectorDrawable aus Ressourcen (Beispielcode zum Abrufen):
Für dieses VectorDrawable stellen Sie einfach die gewünschte Größe ein:
Und zeige zeichnbar in Knopf:
Das ist es. Beachten Sie jedoch, dass Sie setCompoundDrawables verwenden (keine intrinsische Version)!
quelle
Sie können es versuchen
button.requestLayout()
. Wenn die Hintergrundgröße geändert wird, muss sie neu gemessen und angeordnet werden, dies wird jedoch nicht durchgeführtquelle
Das funktioniert mit LayerDrawable:
Beispiel:
quelle
Sie können LayerDrawable nur von einer Ebene und der setLayerInset-Methode aus verwenden:
quelle
Es ist schon eine Weile her, dass die Frage gestellt wurde,
aber für viele ist immer noch unklar, wie man diese einfache Sache macht.
In diesem Fall ist es ziemlich einfach, wenn Sie ein Drawable als zusammengesetztes Drawable in einer TextView (Schaltfläche) verwenden.
Also 2 Dinge, die Sie tun müssen:
1. Grenzen setzen:
2.Stellen Sie das Zeichen entsprechend ein (ohne Verwendung von Eigengrenzen):
ScaleDrawable
ColorDrawable
oderLayerDrawable
(was definitiv für andere Zwecke erstellt wurde)post
quelle
Verwenden Sie
Button.setHeight()
oderButton.setWeight()
und legen Sie einen Wert fest.quelle