2010-04-15 8 views
15

Ich habe die Taste, wie folgt definiert:Wie zentriert DrawableTop und Text vertikal auf dem Button in Android?

<Button 
android:drawableTop="@drawable/ico" 
android:gravity="center" 
android:id="@+id/StartButton2x2" 
android:text="@string/Widget2x2StartBtnLabel" 
android:layout_width="0dip" 
android:layout_height="fill_parent" 
android:layout_weight="1" 
android:background="@drawable/widgetbtn_bg" 
/> 

Das Problem ist, dass ‚drawableTop‘ Bild zu dem oberen Rande der Button Ansicht ausgerichtet ist. Ich möchte es (zusammen mit dem Text-Label) vertikal auf dem Button zentrieren.

'android: Schwere' scheint nur auf Text-Label zu arbeiten. Es wirkt sich nicht auf die Positionierung von 'drawableTop' aus.

Ich konnte es zum Zentrum vertikal ‚android: paddingTop‘ mit - aber das scheint nicht eine gute Idee zu sein. Ich denke, es würde nicht richtig auf unterschiedliche Bildschirmauflösung/Größe funktionieren.

+0

DrawableTop richtet, wie der Name schon sagt, das Zeichen immer auf den oberen Rand des Buttons aus. Versuchen Sie stattdessen, DrawableLeft, oder wenn Sie es hinter dem Text, Android: Hintergrund wollen. –

Antwort

12

Neue Antwort

offenbar falsch verstanden habe ich die Frage. Die Antwort ist, zu verwenden:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    style="@android:style/Widget.Button"> 

... und schließt ein ImageView und eine TextView innen.


Alte Antwort

Hier ist ein Gedanke: Ihre Schaltfläche in einem FrameLayout wickeln. Soemthing wie:

<FrameLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:foreground="@drawable/ico" 
    android:foregroundGravity="center"> 
    <Button 
     android:gravity="center_vertical" 
     android:id="@+id/StartButton2x2" 
     android:text="@string/Widget2x2StartBtnLabel" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:background="@drawable/widgetbtn_bg" /> 
</FrameLayout> 

Btw, was los ist mit android:layout_width="0dip"? Scheint nicht richtig.

+0

Das funktioniert fast. Aber der Effekt ist ein bisschen anders - Jetzt habe ich mein Etikett auf meinem Symbol. Ich möchte es unter dem Symbol haben, aber beide zusammen auf den Knopf zentriert. – grzaks

+0

Die Lösung mit LinearLayout-Stil funktioniert super. – grzaks

+0

@Felix, verwenden Sie 'android: layout_width =" 0dp "' bei der Verwendung von 'android: layout_weight'. Dies weist Android an, die Gewichte zu verwenden, um die Größe basierend darauf, wie viel Platz im umschließenden Layout verfügbar ist, herauszufinden. – karl

9

'android: gravity' scheint nur auf Textbeschriftung zu funktionieren. Es wirkt sich nicht auf "DrawableTop" Positionierung aus.

Korrekt.

Ich konnte es senkrecht zum Zentrum ‚android: paddingTop‘ mit - aber die scheint nicht eine gute Idee zu sein. I denke, es würde nicht richtig funktionieren auf andere Bildschirmauflösung/Größe.

Sie können dies möglicherweise mithilfe von Dimensionsressourcen beheben.

jedoch anders als über Polsterung, können Sie nicht „Zentrum drawableTop und Text vertikal auf den Button“. Das Zeichenmerkmal von Button ist nicht sehr konfigurierbar.

+0

Ok, dann versuche ich es mit Padding. Danke – grzaks

+0

SO braucht wirklich ein Feature, um die Antwort zu +1, um richtig zu sein, aber -1 es für das Ablehnen der Antwort. – Justin

+0

Verwendung von android: paddingTop in der Tastenbelegung funktionierte für mich, um den DrawableTop vertikal zu zentrieren. +1 für die richtige Antwort. –

-2

Verwenden android:drawableTop="@drawable/Icon" statt Hintergrund

Vergessen Sie nicht,

android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
-1
<Button 
    android:id="@+id/....." 
    android:............... 
    ....................... 
    android:gravity="center_horizontal" 
/> 

ich es war in Ordnung zu ändern.

0

Sie können Textview mit seiner Eigenschaft verwenden.

<LinearLayout 
      style="@android:style/Widget.Button" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical" > 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:drawableLeft="@drawable/.." 
       android:text="" /> 
     </LinearLayout> 
Verwandte Themen