2017-01-30 4 views
1

Wie kann ich eine ImageButton erhalten, die eine feste Höhe hat und nur so breit ist, wie es nach dem Verhältnis des Quellbildes benötigt?Padding von ImageButton entfernen

habe ich versucht, die folgenden:

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="8pt" 
    android:minWidth="0pt" 
    android:scaleType="fitCenter" 
    android:adjustViewBounds="true" 
    android:src="@drawable/list_download" 
    android:background="@android:color/black" 
    android:padding="0pt"/> 

I set Hintergrund auf Schwarz nur die Grenzen der es um genau zu sehen, und here ist das Ergebnis.

Ich habe einige Lösungen gesehen, die vorschlagen, negative Polsterungen zu verwenden, aber es ist keine elegante Lösung. Es sollte einen besseren geben.

Ich versuchte ähnliche Konfigurationen auf einem ImageView auch, aber es hatte auch zusätzliche Polsterung. Es ist also kein ImageButton spezifisches Problem (d.h. es bezieht sich nicht auf this Neun-Patch-Problem).

EDIT: Wenn ich scaleType von fitCenter zu fitStart, dann ist das Ergebnis wie this ist ändern. Es gibt also eine minimale Breite.

+0

Meinst du die linke und rechte Polsterung? –

+0

@Rod_Algonquin ja. Für 'fitCenter', links und rechts. Für 'fitStart', nur richtig. – ram

+0

Dies ist reparierbar, indem Sie stattdessen ein Vektor-XML-Bild verwenden, wo Sie die Breite/Höhe des Bildes innerhalb der XML-Datei angeben können (so einfach), auch müssen Sie es nicht skalieren, da Vektor bereits skalierbar ist. –

Antwort

0

können Sie es in einem Frame setzen wie so:

<FrameLayout 
    android:layout_width="wrap_content" 
    android:background="@android:color/black" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:src="@drawable/list_download" 
     android:scaleType="fitCenter" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_width="8dp"/> 
</FrameLayout> 

es viel einfacher sein wird, wie so mit ihm zu spielen

+0

Dies löst das Problem der zusätzlichen Auffüllung nicht. Selbst wenn ich Padding auf "FrameLayout" und "ImageView" auf Null setze, habe ich immer noch Padding. – ram

1

Es ist, weil Sie nur eine begrenzte Höhe eingestellt haben. Das begrenzt die Bildhöhe, aber wenn Android die Breite des Inhalts berechnet (das ursprüngliche unrezisierte Bild), ist es breiter.

Sie erhalten das Bild ohne die schwarze "Polsterung" auf der Seite, wenn Sie auch wrap_content für die Höhe verwenden.

<ImageButton 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:minWidth="0pt" 
android:scaleType="fitCenter" 
android:adjustViewBounds="true" 
android:src="@drawable/list_download" 
android:background="@android:color/black" 
android:padding="0pt"/> 

Also, wenn Sie das Bild wollen eine bestimmte Größe sein, können Sie es in Ihrem ziehbar Ordner in dem Sie mögen Größe ändern.

+0

Wie ich in den Kommentaren der Frage geschrieben habe, möchte ich nur eine Dimension (Breite oder Höhe) einstellen und Android das andere entsprechend berechnen lassen. Wie Sie gesagt haben, ist der Knopf breiter als das Bild. Warum? Seine Breite ist 'wrap_content', also warum ist es breiter als das Bild? Das ist mein Problem. – ram

+0

Ich habe den Kommentar nicht vor einem Beitrag gesehen, sorry. Die Bildschaltfläche wird breiter als das Bild, das auf dem Bildschirm angezeigt wird, aber es hat die _exact width_ von _original drawable/image_. Theres dein Problem. Ich weiß nicht, wie Sie das Bild nach Belieben skalieren können, wenn Sie nur eine statische Höhe oder Breite angeben. Aber ich bin mir sicher, dass es möglich ist. Sie könnten es immer in Ihrem Code (statt Layout) tun. – larseknu

+0

"... aber es hat die exakte Breite des ursprünglichen Zeichens/Bildes." Leider ist das falsch, obwohl ich das erwartet hatte. Es ist breiter als was 'wrap_content' impliziert. (Nur als Randnotiz enthält das Bild selbst keine zusätzliche Füllung, wie in 'fitStart' gesehen.) – ram

Verwandte Themen