Tengo 6 ImageButton en mi actividad, configuro imágenes a través de mi código en ellos (sin usar xml).
Quiero que cubran el 75% del área del botón. Pero cuando algunas imágenes cubren menos área, algunas son demasiado grandes para caber en el botón ImageButton. ¿Cómo cambiar el tamaño programáticamente y mostrarlos? A continuación se muestra la captura de pantalla
a continuación se muestra el archivo xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp" >
<LinearLayout
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_topleft"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_topright"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
</LinearLayout>
<LinearLayout
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_repeat"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_next"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
</LinearLayout>
<LinearLayout
android:layout_height="0dp"
android:layout_width="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_bottomleft"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
<ImageButton
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/button_bottomright"
android:layout_marginBottom="5sp"
android:layout_marginLeft="2sp"
android:layout_marginRight="5sp"
android:layout_marginTop="0sp"
/>
</LinearLayout>
</LinearLayout>
y un fragmento de myClass.java:
public void addImageButtons()
{
iB_topleft = (ImageButton) findViewById(R.id.button_topleft);
iB_topright = (ImageButton) findViewById(R.id.button_topright);
iB_bottomleft = (ImageButton) findViewById(R.id.button_bottomleft);
iB_bottomright = (ImageButton) findViewById(R.id.button_bottomright);
iB_next = (ImageButton) findViewById(R.id.button_next);
iB_repeat = (ImageButton) findViewById(R.id.button_repeat);
}
public void setImageNextAndRepeat()
{
iB_topleft .setImageResource(R.drawable.aa);
iB_topright.setImageResource(R.drawable.bb);
iB_bottomleft.setImageResource(R.drawable.cc);
iB_bottomright.setImageResource(R.drawable.dd);
iB_next.setImageResource(R.drawable.next);
iB_repeat.setImageResource(R.drawable.repeat);
}
Respuestas:
Use
android:padding="20dp"
(ajuste el relleno según sea necesario) para controlar cuánto ocupa la imagen en el botón.Use a
android:scaleType="fitCenter"
para que Android escale las imágenes yandroid:adjustViewBounds="true"
haga que ajusten sus límites debido al escalado.Todos estos atributos se pueden establecer en código en cada uno
ImageButton
en tiempo de ejecución. Sin embargo, en mi opinión, es mucho más fácil configurar y obtener una vista previa en xml.Además, no lo use
sp
para otra cosa que no sea el tamaño del texto, se escala según la preferencia de tamaño del texto que establezca el usuario, por lo que sussp
dimensiones serán mayores de lo previsto si el usuario tiene una configuración de texto "grande". Use en sudp
lugar, ya que no está escalado por la preferencia de tamaño de texto del usuario.Aquí hay un fragmento de cómo debería ser cada botón:
fuente
ImageButton
métodossetScaleType(ImageView.ScaleType.CENTER)
setAdjustViewBounds(true)
hacen esto mediante programación.Estoy usando el siguiente código en
xml
fuente
Intenta usar
android:scaleType="fitXY"
en i-Imagebutton xmlfuente
Estoy usando
android:scaleType="fitCenter"
con satisfacción.fuente
Consulte el siguiente enlace e intente encontrar lo que realmente desea:
https://developer.android.com/reference/android/widget/ImageView.ScaleType.html
fuente
Recientemente descubrí por accidente que, dado que tienes más control sobre un ImageView, puedes configurar un onclicklistener para una imagen. Aquí hay una muestra de un botón de imagen creado dinámicamente.
fuente
Funcionó bien en mi caso. Primero, descarga una imagen y la renombra como iconimage, la ubica en la carpeta dibujable. Puede cambiar el tamaño configurando
android:layout_width
oandroid:layout_height
. Finalmente tenemosfuente
Puedes hacer tu widget ImageButton como lo hice yo. En mi caso, necesitaba un widget con un tamaño de icono fijo. Comencemos por los atributos personalizados:
La clase de widget es bastante simple (el punto clave son los cálculos de relleno en el método onLayout ):
Y por fin deberías usar tu widget así:
fuente