Різниця між зображенням ViewView, що можна натискати, і ImageButton


149

Мені просто цікаво, чи є якась істотна різниця між ImageViewналаштованим, який можна натиснути, порівняно з ImageButton?

Чи є якась причина використання однієї над іншою? Чи є якесь обмеження на доступну схему для того, ImageButtonщо залишається ImageViewяк єдиний можливий варіант?

Чи буду можливо втратити будь-яку функціональність кнопки , якщо я вибираю інтерактивний ImageViewза кадр ImageButton?

Відповіді:


158

Відмінностей немає, крім стилю за замовчуванням. ImageButtonза замовчуванням має ненульовий фон.

EDIT : Також ImageButton.onSetAlpha()метод завжди повертає false, 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
Дякую за вашу відповідь. Ти дав мені більше, ніж я помітив, коли сам перебирав код. Я думаю, що в кінці дня вибір між двома залежатиме від того, яку кількість властивостей за замовчуванням ви можете використовувати без будь-якої настройки.
yjw

Ласкаво просимо! Так, різниці немає дуже багато, тому вибір - між кнопкою та не кнопкою, я думаю.
Майкл

20
Насправді, на моєму досвіді, ще одна різниця між ними полягає в тому, що якщо ви хочете вставити кнопку, яку можна натиснути, у клітинку ListView, зберігаючи цю клітинку як клікова, вам набагато краще з Imageview. EditTexts та ImageButtons, схоже, споживають сенсорну подію, коли TextViews та ImageViews не роблять.
Ернір Ерлінгссон

Я використав зображення ImageView, що можна натискати, але відповідно до нової вимоги я повинен змінити їх на ImageButton, але зображення, що використовується, завищене. Як я можу уникнути інфляції зображення в ImageButton?
codeRider

@codeRider Я не впевнений, що я розумію, що ти маєш на увазі. Якщо його позиціонування відрізняється від того, що було у ImageViewвас, ви можете вказати scaleTypeчітко.
Майкл

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 описую, я просто додаю деталі до його відповіді


Як це відповідає на різні запитання в ОП?
flawyte

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.