2011-08-01 27 views
14

¿Hay alguna manera de hacer esto? He intentado rellenar la imagen y establecer el ancho/alto de la vista, pero ninguno parece funcionar. He aquí un ejemplo:Ajuste del tamaño de un ImageButton en Android

<ImageButton 
    android:id="@+id/search" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/search_small" 
    android:paddingTop="4sp" 
    android:paddingBottom="4sp" 
    android:paddingLeft="6sp" 
    android:paddingRight="6sp" 
    android:layout_marginRight="10sp" 
    android:layout_marginTop="6sp" 
    android:layout_marginBottom="6sp" 
    android:layout_alignParentRight="true" 
/> 

Quiero el botón para ser más ancho que alto, pero está saliendo al revés.

+0

¿Podemos ver el xml o algo así? Es difícil de creer que ha intentado pero no funciona –

+0

Se puede publicar su código de ejemplo? Sería mucho más fácil responder a esta pregunta. Debería poder establecer minHeight y minWidth en un imageButton para hacerlo más grande. – kcunning

+0

minWidth es una buena idea, pero que no funciona bien. –

Respuesta

25

Acabo de tener un juego para tratar de entender su problema.

Parece ImageButton es una vista compuesta que tiene algunos valores preestablecidos. Como algún tipo de margen que no puede anular con el XML. Si no puede cambiar su imagen para que coincida con lo que desea que suceda, entonces es mejor crear su propia vista compuesta.

Aquí está mi ejemplo de una vista compuesta que puede hacer usted mismo:

<FrameLayout android:layout_width="wrap_content" 
      android:layout_height="wrap_content">   
    <Button android:id="@+id/saveSearchButton" 
      android:layout_width="50dp"   
      android:layout_height="50dp" /> 
    <ImageView android:layout_width="45dp" 
       android:layout_height="45dp" 
       android:scaleType="fitXY" 
       android:src="@drawable/ic_menu_save" 
       android:layout_gravity="center"/> 
</FrameLayout> 

<FrameLayout android:layout_width="wrap_content" 
      android:layout_height="wrap_content">   
    <Button android:id="@+id/clearSearchButton" 
      android:layout_width="50dp" 
      android:layout_height="50dp" /> 
    <ImageView android:layout_width="45dp" 
       android:layout_height="45dp" 
       android:scaleType="fitXY" 
       android:src="@drawable/ic_menu_close_clear_cancel" 
       android:layout_gravity="center"/> 
</FrameLayout>  

Y los botones originales:

<ImageButton android:id="@+id/imageButton1" 
      android:src="@drawable/ic_menu_save"    
      android:layout_height="45dp" android:layout_width="45dp"/> 

<ImageButton android:id="@+id/imageButton2" 
      android:src="@drawable/ic_menu_close_clear_cancel" 
      android:layout_height="45dp" 
      android:layout_width="45dp"/> 

Aquí podemos ver la imagen personalizada botón/compuesta seguida por la acumulación de ImageButton como parte del SDK:

Example

+0

Eso fue bastante inteligente Respuesta (y) –

7

No debe usar sp como una dimensión de tamaño - debe usarse dp, ya que le ayudará a su escala de vista directamente con diferentes densidades de pantalla y resoluciones. See Here para las dimensiones.

padding alejará otros elementos de su límite de vista. margin empujará el contenido de su vista hacia adentro desde su límite (es decir, aplastaría el espacio disponible para su imagen). El límite se especifica por alto y ancho. Sin más información, supongo que te confunden tus márgenes: elimínalos y experimenta.

También es útil para usted: android:scaleType="fitXY" hace que la imagen se estire para que coincida con las dimensiones X e Y que están disponibles. Te ayuda a ver el lienzo disponible para tu imagen. Una vez que sienta que el área es lo suficientemente grande como para una imagen a escala correcta, cambie el tipo de escala a centro. See Here para todos los tipos de escala.

+0

Además, para "Botón es más ancho que alto". Esto está controlado por tus atributos layout_width y layout_height. Ellos controlan el ancho y la altura de su componente. "match_parent" significa que el botón intentará ocupar tanto espacio como sea posible en relación con otras vistas de la página. Leer más [esta sección] (http://developer.android.com/guide/topics/ui/index.html) para aprender sobre el diseño de la interfaz de usuario. – Graeme

+0

Gracias, pero ya sé la diferencia entre margen y relleno, y entre sp y dp. Esa no es la fuente de mi problema. –

+0

Ah, y también sé lo layout_width y el trabajo layout_height. –

0

¿Puede explicar su pregunta más ampliamente para que podamos entender mejor.

Según mi entender, quiere establecer su Altura/Ancho de ImageButton. Pero no funciona, ¿verdad? Quiero preguntarte si, si escribes una altura/ancho específico, tampoco funciona.

He copiado tu código en mis archivos y he cambiado el alto/ancho manualmente, entonces funcionará.

Por favor, explique su pregunta.

Gracias.

+0

Nada funciona, ese es el problema. No puedo controlar el tamaño de un ImageButton de ninguna manera. –

+0

En lugar de utilizar ImageButton use solo el botón y configureBackgroung para establecer la imagen. Y luego prueba. – anddev

0

Terminé el diseño siguiendo la respuesta de Graeme. Cuatro "imageButton" arreglan la parte inferior, el mismo ancho, el tamaño de imagen cambiante. ¡Gracias!

<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:background="@color/#000" 
     android:weightSum="100" > 

     <FrameLayout 
      android:id="@+id/flBottom1" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="25" 
      > 
      <Button 
       android:id="@+id/ibBottom1" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@drawable/detail_tab_bg_selector"/> 
      <ImageView 
       android:layout_width="32dp" 
       android:layout_height="32dp" 
       android:scaleType="fitXY" 
       android:src="@drawable/icon_home_48_48" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="5dp" 
       /> 
      <TextView 
       android:id="@+id/tvBottom1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="35dp" 
       android:text="@string/bailty_text_home" 
       style="@style/bailtyTextBottom" 
       /> 
     </FrameLayout> 


     <FrameLayout 
      android:id="@+id/flBottom2" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="25" 
      > 
      <Button 
       android:id="@+id/ibBottom2" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@drawable/detail_tab_bg_selector"/> 
      <ImageView 
       android:layout_width="32dp" 
       android:layout_height="32dp" 
       android:scaleType="fitXY" 
       android:src="@drawable/icon_compose_48_48" 
       android:layout_gravity="center_horizontal" 
       /> 
      <TextView 
       android:id="@+id/tvBottom2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="35dp" 
       android:text="@string/bailty_text_comment" 
       style="@style/bailtyTextBottom" 
       /> 
     </FrameLayout> 


     <FrameLayout 
      android:id="@+id/flBottom3" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="25" 
      > 
      <Button 
       android:id="@+id/ibBottom3" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@drawable/detail_tab_bg_selector"/> 
      <ImageView 
       android:layout_width="32dp" 
       android:layout_height="32dp" 
       android:scaleType="fitXY" 
       android:src="@drawable/icon_search_48_48" 
       android:layout_gravity="center_horizontal" 
       /> 
      <TextView 
       android:id="@+id/tvBottom3" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="35dp" 
       android:text="@string/bailty_text_search" 
       style="@style/bailtyTextBottom" 
       /> 
     </FrameLayout> 


     <FrameLayout 
      android:id="@+id/flBottom4" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="25" 
      > 
      <Button 
       android:id="@+id/ibBottom4" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="@drawable/detail_tab_bg_selector"/> 
      <ImageView 
       android:layout_width="32dp" 
       android:layout_height="32dp" 
       android:scaleType="fitXY" 
       android:src="@drawable/icon_barcode_48_48" 
       android:layout_gravity="center_horizontal" 
       /> 
      <TextView 
       android:id="@+id/tvBottom4" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="35dp" 
       android:text="@string/bailty_text_scan_again" 
       style="@style/bailtyTextBottom" 
       /> 
     </FrameLayout> 
    </LinearLayout> 
10

Conjunto android:background en lugar de android:src para ajustar la imagen en el botón.Esto ajustará la imagen al tamaño de tu botón. Luego ajusta el relleno después.

2

Uso los atributos minWidth y minHeight, combinados con un tipo de escala fitXY y envolviendo su contenido para modular la forma de mi botón.

Usted quiere hacer su botón "más amplia", por lo que por ejemplo, la impresión de un botón 200X100 de un icono cuadrado, se puede sentar a cabo de esa manera:

<ImageButton 
     android:id="@+id/fooButton" 
     android:src="@drawable/play_button" 
     android:backgroundTint="#00000000" 
     android:minWidth="200" 
     android:minHeight="100" 
     android:scaleType="fitXY" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="playStuff" 
     /> 

enter image description here

Cuestiones relacionadas