Unterschied zwischen einer anklickbaren ImageView und ImageButton

149

Ich frage mich nur, ob es einen signifikanten Unterschied zwischen einem ImageViewklickbaren und einem ImageButton?

Gibt es einen Grund, einen über den anderen zu verwenden? Gibt es eine Einschränkung für das Drawable für ein ImageButton, das ImageViewals einzig mögliche Option übrig bleibt ?

Verliere ich möglicherweise die Funktionalität einer Schaltfläche, wenn ich mich für ein anklickbares ImageViewOver entscheide ImageButton?

yjw
quelle

Antworten:

158

Es gibt keine Unterschiede außer dem Standardstil. ImageButtonhat standardmäßig einen Hintergrund ungleich Null.

BEARBEITEN : Außerdem gibt die ImageButton.onSetAlpha()Methode immer false zurück, scaleTypeist auf eingestellt centerund wird immer als fokussierbar aufgeblasen.

Hier ist der ImageButtonStandardstil:

 <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>
Michael
quelle
1
Danke für deine Antwort. Sie haben mir mehr gegeben, als ich beim Durchgehen des Codes selbst gesehen habe. Ich denke, am Ende des Tages hängt die Auswahl zwischen den beiden davon ab, wie viele der Standardeigenschaften Sie ohne Anpassung verwenden können.
yjw
Bitte! Ja, es gibt in der Tat keinen großen Unterschied, also denke ich, zwischen Knopf und nicht Knopf.
Michael
20
Meiner Erfahrung nach besteht ein weiterer Unterschied zwischen beiden darin, dass Sie mit einer Bildansicht viel besser dran sind, wenn Sie eine anklickbare Schaltfläche in eine ListView-Zelle einfügen möchten, während die Zelle selbst als anklickbar bleibt. EditTexts und ImageButtons scheinen das Touch-Ereignis zu verbrauchen, wenn TextViews und ImageViews dies nicht tun.
Ernir Erlingsson
Ich hatte anklickbares ImageView verwendet, aber gemäß der neuen Anforderung muss ich sie in ImageButton ändern, aber das verwendete Bild wird aufgeblasen. Wie kann ich das Aufblasen von Bildern in ImageButton vermeiden?
CodeRider
@codeRider Ich bin mir nicht sicher, ob ich verstehe, was du meinst. Wenn sich die Positionierung von der Position unterscheidet ImageView, können Sie dies scaleTypeexplizit angeben .
Michael
24

ImageButton wird von ImageView geerbt

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());
}

Wie @Micheal beschreibt, füge ich seiner Antwort nur Details hinzu

Zar E Ahmer
quelle
Wie beantwortet dies die verschiedenen Fragen im OP?
Fehler
7

Der Effekt eines Schaltflächenklicks beim Klicken ist für die Bildschaltfläche vorhanden, nicht jedoch für imageView.

Prashanth Debbadwar
quelle