web-dev-qa-db-fra.com

Différence entre un ImageView cliquable et ImageButton

Je me demande simplement s'il existe une différence significative entre un ImageView défini comme cliquable, par rapport à un ImageButton?

Y a-t-il une raison pour utiliser l'un sur l'autre? Existe-t-il une restriction sur le dessin pour un ImageButton qui laisse ImageView comme seule option possible?

Vais-je éventuellement perdre la fonctionnalité d'un bouton si j'optais pour un ImageView sur ImageButton cliquable?

140
yjw

Il n'y a pas de différences, sauf le style par défaut. ImageButton a un arrière-plan non nul par défaut.

EDIT : De plus, la méthode ImageButton.onSetAlpha() renvoie toujours false, scaleType est défini sur center et sa toujours gonflé comme focusable.

Voici le style par défaut de ImageButton:

 <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>
150
Michael

ImageButton est hérité 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());
}

comme @Micheal décris que je viens d'ajouter des détails à sa réponse

20
Xar E Ahmer

L'effet d'un clic de bouton quand je clique est là pour imagebutton mais pas pour imageView.

7