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?

yjw
sumber

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>
Michael
sumber
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

Zar E Ahmer
sumber
Bagaimana ini menjawab berbagai pertanyaan di OP?
flawyte
7

Efek klik tombol ketika saya mengklik ada untuk imagebutton tetapi tidak untuk imageView.

Prashanth Debbadwar
sumber