ความแตกต่างระหว่าง ImageView ที่คลิกได้และ ImageButton


149

ฉันแค่สงสัยว่ามีความแตกต่างที่สำคัญระหว่างImageViewชุดที่สามารถคลิกได้ImageButtonหรือไม่เปรียบเทียบกับ?

มีเหตุผลในการใช้อย่างใดอย่างหนึ่งมากกว่าที่อื่น ๆ ? มีข้อ จำกัด ใด ๆ บน drawable สำหรับImageButtonที่ใบImageViewเป็นตัวเลือกที่เป็นไปได้เท่านั้น?

ฉันจะสูญเสียการทำงานของปุ่มใด ๆหรือไม่หากฉันเลือกให้คลิกได้ImageViewมากกว่าImageButton?

คำตอบ:


158

ไม่มีความแตกต่างยกเว้นสไตล์เริ่มต้น ImageButtonมีพื้นหลังที่ไม่ใช่ null โดยค่าเริ่มต้น

แก้ไข : นอกจากนี้ImageButton.onSetAlpha()วิธีการมักจะส่งกลับเท็จscaleTypeถูกตั้งค่าcenterและมันมักจะขยายตัวเป็นที่สามารถโฟกัสได้

ImageButtonสไตล์เริ่มต้นของที่นี่:

 <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
ขอบคุณสำหรับคำตอบ. คุณให้ฉันมากกว่าที่ฉันเห็นเมื่อทำรหัสด้วยตัวเอง ฉันเดาตอนท้ายของวันการเลือกระหว่าง 2 จะขึ้นอยู่กับคุณสมบัติเริ่มต้นที่คุณสามารถใช้ได้โดยไม่ต้องปรับแต่งใด ๆ
yjw

ยินดีต้อนรับคุณ! ใช่มีความแตกต่างไม่มากนักดังนั้นตัวเลือกอยู่ระหว่างปุ่มกับปุ่มไม่ใช่ฉันคิด
Michael

20
จากประสบการณ์จริงของฉันความแตกต่างระหว่างสองอย่างนี้ก็คือถ้าคุณต้องการใส่ปุ่มแบบคลิกได้ลงในเซลล์ ListView ในขณะที่รักษาเซลล์ตัวเองให้เป็นแบบคลิกได้ EditTexts และ ImageButtons ดูเหมือนจะใช้เหตุการณ์การสัมผัสเมื่อ TextViews และ ImageViews ไม่ทำงาน
Ernir Erlingsson

ฉันใช้ ImageView ที่สามารถคลิกได้ แต่ตามข้อกำหนดใหม่ฉันต้องเปลี่ยนเป็น ImageButton แต่รูปภาพที่ใช้นั้นได้รับ Inflated ฉันจะหลีกเลี่ยงภาวะเงินเฟ้อภาพใน ImageButton ได้อย่างไร
codeRider

@codeRider ฉันไม่แน่ใจว่าฉันเข้าใจความหมายของคุณ หากการจัดตำแหน่งนั้นแตกต่างจากที่อยู่ในตัวImageViewคุณคุณสามารถระบุได้scaleTypeอย่างชัดเจน
Michael

24

ImageButton สืบทอดมาจาก 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());
}

ตามที่ @Micheal อธิบายฉันแค่เพิ่มรายละเอียดให้กับคำตอบของเขา


สิ่งนี้จะตอบคำถามต่าง ๆ ใน OP ได้อย่างไร
flawyte

7

ผลกระทบของการคลิกปุ่มเมื่อฉันคลิกจะมีสำหรับปุ่มรูป แต่ไม่ได้สำหรับ imageView

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.