2011-05-01 20 views
119

Me pregunto si hay alguna diferencia significativa entre un ImageView que se pueda hacer clic, en comparación con un ImageButton?Diferencia entre un ImageView y un ImageButton clicables

¿Hay alguna razón para usar una sobre la otra? ¿Hay alguna restricción en el drawable para un ImageButton que deje ImageView como la única opción posible?

¿Perderé la funcionalidad de un botón si opto por hacer clic en ImageView sobre ImageButton?

Respuesta

136

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

EDITAR: También, ImageButton.onSetAlpha() método siempre devuelve falso, scaleType se establece en center y siempre ha inflado como enfocable.

Aquí es ImageButton 's estilo por defecto:

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

Gracias por su respuesta. Me diste más de lo que vi cuando revisaba 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 pueda usar sin ninguna personalización. – yjw

+0

¡De nada! Sí, no hay mucha diferencia, así que la elección es entre botón y no botón, creo. – Michael

+15

En realidad, en mi experiencia, otra diferencia entre los dos es que si quieres poner un botón que se puede hacer clic en una celda de ListView mientras se mantiene la celda en sí misma como clicable, estás mucho mejor con una Imageview. Los EditTexts y los ImageButtons parecen consumir el evento táctil cuando TextViews e ImageViews no lo hacen. –

17

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 @Micheal describir Puedo añadir detalles a su respuesta

4

El efecto de un botón haga clic cuando haga clic está allí para imagebutton pero no para imageView.

Cuestiones relacionadas