Diferencia entre un ImageView en el que se puede hacer clic y un ImageButton

149

Me pregunto si hay alguna diferencia significativa entre un ImageViewque se puede hacer clic, en comparación con un ImageButton?

¿Hay alguna razón para usar uno sobre el otro? ¿Hay alguna restricción en el sorteo para un ImageButtonque sale ImageViewcomo la única opción posible?

¿Voy a perder posiblemente ninguna funcionalidad de un botón si optar por un hacer clic ImageViewsobre ImageButton?

yjw
fuente

Respuestas:

158

No hay diferencias, excepto el estilo predeterminado. ImageButtontiene un fondo no nulo por defecto.

EDITAR : Además, el ImageButton.onSetAlpha()método siempre devuelve falso, scaleTypese establece en centery siempre se infla como enfocable.

Aquí está ImageButtonel estilo predeterminado:

 <style name="Widget.ImageButton">
     <item name="android:focusable">true</item>
     <item name="android:clickable">true</item>
     <item name="android:scaleType">center</item>
     <item name="android:background">@android:drawable/btn_default</item>
 </style>
Miguel
fuente
1
Gracias por tu respuesta. Me diste más de lo que vi cuando revisé el código yo mismo. Supongo que al final del día, la selección entre los 2 dependerá de la cantidad de propiedades predeterminadas que puede usar sin ninguna personalización.
yjw
¡De nada! Sí, no hay mucha diferencia, así que creo que la opción es entre botón y no botón.
Michael
20
En realidad, en mi experiencia, otra diferencia entre los dos es que si desea poner un botón en la celda de ListView mientras mantiene la celda como clicable, es mucho mejor con una vista de imagen. EditTexts e ImageButtons parecen consumir el evento táctil cuando TextViews e ImageViews no lo hacen.
Ernir Erlingsson
Había usado ImageView en el que se podía hacer clic, pero según los nuevos requisitos, tengo que cambiarlos a ImageButton, pero la imagen utilizada se infla. ¿Cómo puedo evitar la inflación de la imagen en ImageButton?
codeRider
@codeRider No estoy seguro de entender lo que quieres decir. Si su posicionamiento difiere de lo que era ImageView, puede especificarlo scaleTypeexplícitamente.
Michael
24

ImageButton se hereda de ImageView

public class ImageButton extends ImageView {
public ImageButton(Context context) {
    this(context, null);
}

public ImageButton(Context context, AttributeSet attrs) {
    this(context, attrs, com.android.internal.R.attr.imageButtonStyle);
}

public ImageButton(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    setFocusable(true);
}

@Override
protected boolean onSetAlpha(int alpha) {
    return false;
}

@Override
public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
    super.onInitializeAccessibilityEvent(event);
    event.setClassName(ImageButton.class.getName());
}

@Override
public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(info);
    info.setClassName(ImageButton.class.getName());
}

como describe @Micheal, solo agrego detalles a su respuesta

Zar E Ahmer
fuente
¿Cómo responde esto a las diversas preguntas en el OP?
flawyte
7

El efecto de hacer clic en un botón cuando hago clic está ahí para el botón image pero no para imageView.

Prashanth Debbadwar
fuente