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?

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>

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


Jak to odpowiada na różne pytania w PO?
flawyte

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.