Разница между кликабельным ImageView и ImageButton


149

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

Есть ли причина для использования одного над другим? Есть ли какие - либо ограничения на Drawable в течение того, ImageButtonчто листья , ImageViewкак это возможно только вариант?

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

Ответы:


158

Там нет никаких отличий, кроме стиля по умолчанию. ImageButtonпо умолчанию имеет ненулевой фон.

РЕДАКТИРОВАТЬ : Кроме того, 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

Пожалуйста! Да, разницы на самом деле не так много, поэтому я думаю, что выбор между кнопкой, а не кнопкой.
Майкл

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 это не так - он просто расширяет принятый ответ с тем, как ImageButtonпроисходит ImageView.
Scre

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.