Różnica między klikalnym ImageView i ImageButton

149

Zastanawiam się tylko, czy istnieje jakaś znacząca różnica między elementem, ImageViewktóry ma być klikalny, a ImageButton?

Czy jest jakiś powód, aby używać jednego nad drugim? Czy są jakieś ograniczenia dotyczące możliwości wyciągania, ImageButtonktóre pozostawia ImageViewjako jedyną możliwą opcję?

Będę prawdopodobnie tracić funkcjonalność przycisku gdybym zdecydować się na klikalne ImageViewover ImageButton?

yjw
źródło

Odpowiedzi:

158

Nie ma różnic, z wyjątkiem domyślnego stylu. ImageButtonma domyślnie niezerowe tło.

EDYCJA : Ponadto ImageButton.onSetAlpha()metoda zawsze zwraca wartość false, scaleTypejest ustawiona na centeri zawsze jest zawyżona jako aktywna.

Oto ImageButtondomyślny styl:

 <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
źródło
1
Dziękuję za odpowiedź. Dałeś mi więcej, niż zauważyłem, kiedy sam przeglądałem kod. Wydaje mi się, że koniec dnia wybór między 2 będzie zależał od tego, ile domyślnych właściwości możesz użyć bez dostosowywania.
yjw
Nie ma za co! Tak, rzeczywiście nie ma dużej różnicy, więc myślę, że wybór jest między przyciskiem a nie przyciskiem.
Michael
20
Właściwie z mojego doświadczenia wynika, że ​​inna różnica między nimi polega na tym, że jeśli chcesz umieścić klikalny przycisk w komórce ListView, zachowując samą komórkę jako klikalną, znacznie lepiej jest z widokiem obrazu. Wydaje się, że EditTexts i ImageButtons wykorzystują zdarzenie dotyku, gdy TextViews i ImageViews go nie obsługują.
Ernir Erlingsson
Użyłem klikalnego ImageView, ale zgodnie z nowym wymaganiem muszę zmienić je na ImageButton, ale używany obraz zostanie napompowany. Jak mogę uniknąć inflacji obrazu w ImageButton?
codeRider
@codeRider Nie jestem pewien, czy rozumiem, co masz na myśli. Jeśli jego pozycjonowanie różni się od tego, w jakim się znajdował ImageView, możesz i scaleTypewyraźnie określić .
Michael
24

ImageButton jest dziedziczona z 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());
}

jak opisuje @Micheal, po prostu dodaję szczegóły do ​​jego odpowiedzi

Zar E Ahmer
źródło
Jak to odpowiada na różne pytania w PO?
flawyte
7

Efekt kliknięcia przycisku po kliknięciu jest dostępny dla imagebutton, ale nie dla imageView.

Prashanth Debbadwar
źródło