ImageButton: icono cuadrado de fuerza (height = WRAP_CONTENT, width =?)

En mi LinearLayout horizontal tengo un TextEdit y un ImageButton. ImageButton es tan alto como el TextEdit.

Me gustaría que el ImageButton sea exactamente tan ancho como largo.

En este momento parece que el ancho del ImageButton es como cuando no hay escala (anchura de ImageButton [px] = anchura dibujable unscaled [px]):

ejemplo

<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/txtName" android:layout_width="1dp" android:layout_height="wrap_content" android:layout_weight="1" /> <ImageButton android:id="@+id/btSet" android:layout_width="wrap_content" android:layout_height="match_parent" android:scaleType="fitEnd" android:src="@drawable/pin2" /> </LinearLayout> 

Cómo debería ser:

objetivo

Pruebe esto, creo que esto debería funcionar:

 <RelativeLayout android:layout_width="match_parent" android:layout_height="40dp" android:orientation="horizontal" > <ImageButton android:id="@+id/btSet" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentRight="true" android:scaleType="centerInside" android:adjustViewBounds="true" android:src="@drawable/pin2" /> <EditText android:id="@+id/txtName" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_toLeftOf="@id/btSet" /> </RelativeLayout> 

Explicación: centerInside asegurará que la imagen se escalará proporcionalmente dentro de los límites del ImageButton . adjustViewBounds="true" … ajustará los límites de la vista, si la imagen necesita ser escalada.

Intenta agregar

AdjustViewBounds = "true"

Al ImageButton, que debe recortar el exceso de ancho

 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/txtName" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> <ImageButton android:id="@+id/btSet" android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:src="@drawable/pin" /> </LinearLayout> 

Utilizar

 android:scaleType="fitCenter" 

O android:scaleType="centerInside"

En el ImageButton en archivo xml.

Simplemente use el weightSum para dividir el tamaño de los controles en consecuencia …

 <?xml version="1.0" encoding="utf-8" ?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="1.0" > <EditText android:id="@+id/txtName" android:layout_weight="0.8" android:layout_height="wrap_content" android:layout_width="0dp" android:inputType="text" android:singleLine="true"/> <ImageButton android:id="@+id/btSet" android:layout_weight="0.2" android:layout_height="wrap_content" android:layout_width="0dp" android:scaleType="fitEnd" android:src="@drawable/pin2" /> </LinearLayout> </LinearLayout> 

Espero que te ayude.

Como usted quiere que su ImageButton es extensible y exactamente tan ancho como es largo, su mejor utilizar la NinePatch Image . Puedes encontrar la forma de ayuda aquí Draw 9-patch & ¿Cómo funciona la herramienta de nueve parches de Android?

 <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="1.0" > <EditText android:id="@+id/txtName" android:layout_weight="0.75" // this work like percentage adjust as u want 70 or 75 android:layout_height="wrap_content" android:layout_width="0dp" android:inputType="text" android:singleLine="true"/> <ImageButton android:id="@+id/btSet" android:layout_weight="0.25" // this work like percentage adjust as u want 25 or 30 android:layout_height="wrap_content" android:layout_width="0dp" android:scaleType="fitEnd" android:src="@drawable/pin2" /> </LinearLayout> 

Simplemente agregue la siguiente línea a su ImageButton y el fondo extra se desvanecerá:

 android:layout_gravity="center|clip_horizontal" 

Espero que esto funcione

Sólo se encontró con algo como esto y las otras sugerencias no ayuda. ¿Qué ayudó a establecer el relleno en el ImageButton:

 android:padding="5dp" 

Además de eso, no toque el diseño original. El botón se convirtió en cuadrado en los 3 emuladores que probé (3.2, 4.4.2, 5.1)

Puede cambiar el tamaño del botón de imagen mediante px … como a continuación …

  `android:layout_width="5px" android:layout_height="5px"` 
  • Cómo crear una cuadrícula de 10x10 en Android?
  • Cómo crear un botón de imagen en Android?
  • ¿Cómo puedo cambiar el tamaño de imageButton?
  • Animación de agitación de botón de Android
  • animar ImageButton en android?
  • ClipChilren configurado como false aún recortando
  • Aplicar diseño de material táctil ondulación a ImageButton?
  • Android ImageButton sin borde, pero sigue con la indicación de clic
  • Widget Android ImageButton pierde imagen cuando se gira la pantalla
  • ¿Cómo extender ImageButton correctamente?
  • Añadir un botón de imagen con fondo transparente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.