2010-04-15 15 views
15

que tienen el botón define como sigue:Cómo centrar drawableTop y texto verticalmente en el botón en 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" 
/> 

El problema es que la imagen 'drawableTop' está alineado con el borde superior de la vista del botón. Me gustaría centrarlo (junto con la etiqueta de texto) verticalmente en el botón.

'android: gravity' parece funcionar solo en la etiqueta de texto. No afecta el posicionamiento 'drawableTop'.

Pude centrarlo verticalmente usando 'android: paddingTop', pero eso no parece ser una buena idea. Supongo que no funcionaría correctamente en diferentes resolución de pantalla/tamaño.

+0

drawableTop, como su nombre indica, siempre alinea el dibujable a la parte superior del botón. Pruebe drawableLeft en su lugar, o si lo quiere detrás del texto, android: background. –

Respuesta

12

nueva respuesta

Al parecer, no he entendido bien la pregunta. La respuesta es utilizar:

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

... y encerrar un ImageView y una TextView interior.


respuesta Antiguo

Aquí es un pensamiento: envolver el botón dentro de un FrameLayout. Soemthing como:

<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> 

Por cierto, ¿qué pasa con android:layout_width="0dip"? No parece correcto

+0

Esto casi funciona. Pero el efecto es un poco diferente: ahora tengo mi etiqueta en la parte superior de mi icono. Me gustaría tenerlo debajo del ícono, pero ambos se centraron en el botón. – grzaks

+0

La solución con estilo LinearLayout funciona muy bien. – grzaks

+0

@Felix, usas 'android: layout_width =" 0dp "' cuando usas 'android: layout_weight'. Esto le dice a Android que use los pesos para calcular el tamaño según la cantidad de espacio disponible en el diseño adjunto. – karl

9

'android: gravity' parece funcionar solo en la etiqueta de texto. No afecta el posicionamiento 'drawableTop'.

Correcto.

pude para centrarlo verticalmente usando 'android: paddingTop' - pero eso no parece ser una buena idea. I Supongo que no funcionaría correctamente en resolución/tamaño de pantalla diferente.

Puede solucionar esto utilizando recursos de dimensiones.

Sin embargo, salvo en el relleno, no se puede "centrar Táctil y texto verticalmente en el Botón". La característica dibujable de Button no es muy configurable.

+0

Ok entonces, voy a intentar con relleno entonces. Gracias – grzaks

+0

SO realmente necesita una función para +1 la respuesta correcta, pero -1 por desaprobación de la respuesta. – Justin

+0

Usando android: paddingTop en el diseño del botón funcionó para centrar verticalmente el DrawableTop. +1 para la respuesta correcta. –

-2

Uso android:drawableTop="@drawable/Icon" en lugar de fondo

No se olvide de cambiar

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

yo estaba bien con él.

0

Puede usar textview con su propiedad.

<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> 
Cuestiones relacionadas