Differenza tra ImageView selezionabile e ImageButton


149

Mi chiedo solo se esiste una differenza significativa tra un valore ImageViewimpostato per essere selezionabile, rispetto a unImageButton ?

C'è qualche motivo per usarne uno rispetto all'altro? C'è qualche restrizione sul disegno per un ImageButtonche lascia ImageViewcome unica opzione possibile?

Avrò forse perdere alcuna funzionalità di un pulsante, se opto per un cliccabile ImageViewsopra ImageButton?

Risposte:


158

Non ci sono differenze, tranne lo stile predefinito. ImageButtonha uno sfondo non nullo per impostazione predefinita.

EDIT : Inoltre, il ImageButton.onSetAlpha()metodo restituisce sempre false, scaleTypeè impostato su centered è sempre gonfiato come focalizzabile.

Ecco lo ImageButtonstile predefinito:

 <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
Grazie per la tua risposta. Mi hai dato più di quanto ho notato quando ho esaminato il codice da solo. Immagino che alla fine della giornata, la selezione tra i 2 dipenderà da quante proprietà predefinite è possibile utilizzare senza alcuna personalizzazione.
yjw

Prego! Sì, non c'è molta differenza, quindi la scelta è tra il pulsante e non il pulsante, credo.
Michael,

20
In realtà, nella mia esperienza, un'altra differenza tra i due è che se vuoi mettere un pulsante cliccabile nella cella di ListView mantenendo la cella stessa come cliccabile, stai molto meglio con una Imageview. EditTexts e ImageButtons sembrano consumare l'evento touch quando TextViews e ImageViews non lo fanno.
Ernir Erlingsson,

Avevo usato ImageView cliccabile ma secondo i nuovi requisiti devo cambiarli in ImageButton ma l'immagine utilizzata viene gonfiata. Come posso evitare l'inflazione dell'immagine in ImageButton?
codeRider

@codeRider Non sono sicuro di aver capito cosa intendi. Se il suo posizionamento differisce da quello che era in ImageViewte, puoi specificarlo scaleTypeesplicitamente.
Michael,

24

ImageButton è ereditato da 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());
}

come descrive @Micheal, aggiungo dettagli alla sua risposta


Come risponde alle varie domande nel PO?
Flawyte

7

L'effetto di un clic sul pulsante quando faccio clic è lì per imagebutton ma non per imageView.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.