144 votes

La différence entre un lien ImageView et ImageButton

Je me demandais simplement si il n'y a aucune différence significative entre un ImageView qui doit être cliquable, contre une ImageButton?

Est-il une raison pour l'utilisation de l'un sur l'autre? Est-il une restriction sur le drawable pour un ImageButton que les feuilles ImageView comme la seule option possible?

Vais-je perdre toutes les fonctionnalités d'un bouton si j'opte pour un cliquables ImageView sur ImageButton?

153voto

Michael Points 16659

Il n'y a pas de différences, à l'exception de style par défaut. ImageButton a une valeur non nulle arrière-plan par défaut.

EDIT: Aussi, ImageButton.onSetAlpha() méthode renvoie toujours false, scaleType est définie à l' center et c'est toujours gonflé que peut recevoir le focus.

Voici ImageButton's style par défaut:

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

21voto

Nepster Points 893

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

@Michael décrire je viens d'ajouter des détails à sa réponse

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X