Sự khác biệt giữa ImageView và ImageButton có thể nhấp


149

Tôi chỉ tự hỏi liệu có sự khác biệt đáng kể nào giữa một ImageViewbộ được đặt thành có thể nhấp được không, so với một ImageButton?

Có bất kỳ lý do cho việc sử dụng cái này hơn cái kia không? Có bất kỳ hạn chế nào đối với khả năng rút tiền đối với một ImageButtonlá mà ImageViewlà lựa chọn duy nhất có thể không?

Tôi sẽ có thể mất bất kỳ chức năng của một nút nếu tôi lựa chọn một nhấp được ImageViewhơn ImageButton?

Câu trả lời:


158

Không có sự khác biệt, ngoại trừ phong cách mặc định. ImageButtoncó một nền tảng không null theo mặc định.

EDIT : Ngoài ra, ImageButton.onSetAlpha()phương thức luôn trả về false, scaleTypeđược đặt thành centervà nó luôn được thổi phồng thành tiêu điểm.

Đây là ImageButtonkiểu mặc định:

 <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
Cảm ơn câu trả lời của bạn. Bạn đã cho tôi nhiều hơn tôi phát hiện khi tự mình đi qua mã. Tôi đoán cuối ngày, lựa chọn giữa 2 sẽ phụ thuộc vào số lượng thuộc tính mặc định bạn có thể sử dụng mà không có bất kỳ tùy chỉnh nào.
năm11

Không có gì! Vâng, thực sự không có nhiều sự khác biệt, vì vậy sự lựa chọn là giữa nút và không phải nút, tôi nghĩ vậy.
Michael

20
Thực tế theo kinh nghiệm của tôi, một điểm khác biệt giữa hai loại đó là nếu bạn muốn đặt một nút có thể nhấp vào một ô ListView cảm ứng trong khi duy trì chính ô đó là có thể nhấp, bạn sẽ tốt hơn nhiều với một Chế độ xem. EditTexts và ImageButtons dường như tiêu thụ sự kiện cảm ứng khi TextViews và ImageViews donet.
Ernir Erlingsson

Tôi đã sử dụng ImageView có thể nhấp nhưng theo yêu cầu mới, tôi phải thay đổi chúng thành ImageButton nhưng hình ảnh được sử dụng bị thổi phồng. Làm cách nào để tránh lạm phát hình ảnh trong ImageButton?
codeRider

@codeRider Tôi không chắc là tôi hiểu ý của bạn. Nếu định vị của nó khác với những gì nó có trong ImageViewbạn có thể và chỉ định scaleTyperõ ràng.
Michael

24

ImageButton được kế thừa từ 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());
}

như @Micheal mô tả tôi chỉ cần thêm chi tiết vào câu trả lời của anh ấy


Làm thế nào điều này trả lời các câu hỏi khác nhau trong OP?
lỗ hổng

7

Hiệu ứng của một lần bấm nút khi tôi nhấp là có cho nút hình ảnh nhưng không phải cho hình ảnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.