Perbedaan antara ImageView yang dapat diklik dan ImageButton


149

Saya hanya ingin tahu apakah ada perbedaan signifikan antara ImageViewyang diatur agar dapat diklik, dibandingkan dengan ImageButton?

Apakah ada alasan untuk menggunakan salah satunya? Apakah ada batasan pada drawable untuk ImageButtonyang meninggalkan ImageViewsebagai satu-satunya pilihan yang mungkin?

Apakah saya mungkin kehilangan fungsi tombol jika saya memilih untuk diklik ImageViewlebih ImageButton?

Jawaban:


158

Tidak ada perbedaan, kecuali gaya default. ImageButtonmemiliki latar belakang non-null secara default.

EDIT : Juga, ImageButton.onSetAlpha()metode selalu mengembalikan false, scaleTypediatur ke centerdan selalu meningkat sebagai fokus.

Inilah ImageButtongaya default:

 <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
Terima kasih atas jawaban anda. Anda memberi saya lebih banyak daripada yang saya lihat saat membaca kode sendiri. Saya kira akhir hari, pemilihan antara 2 akan tergantung pada seberapa banyak properti default yang dapat Anda gunakan tanpa penyesuaian.
yjw

Sama-sama! Ya, memang tidak ada banyak perbedaan, jadi pilihannya adalah antara tombol dan bukan tombol, saya pikir.
Michael

20
Sebenarnya dalam pengalaman saya perbedaan lain antara keduanya adalah bahwa jika Anda ingin meletakkan tombol yang dapat diklik ke dalam sel ListView sambil mempertahankan sel itu sendiri sebagai dapat diklik Anda jauh lebih baik dengan Imageview. EditTeks dan ImageButtons tampaknya mengkonsumsi acara sentuh ketika TextViews dan ImageViews tidak.
Ernir Erlingsson

Saya telah menggunakan ImageView yang dapat diklik tetapi sesuai persyaratan baru saya harus mengubahnya ke ImageButton tetapi gambar yang digunakan akan meningkat. Bagaimana saya bisa menghindari inflasi gambar di ImageButton?
codeRider

@ codeRider Saya tidak yakin saya mengerti maksud Anda. Jika pemosisiannya berbeda dari yang ada di ImageViewAnda dapat dan tentukan scaleTypesecara eksplisit.
Michael

24

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

sebagai @Micheal jelaskan saya hanya menambahkan rincian untuk jawabannya


Bagaimana ini menjawab berbagai pertanyaan di OP?
flawyte

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.