可点击的ImageView和ImageButton之间的区别


149

我只是想知道被ImageView设置为可点击的与相比是否有显着差异ImageButton

有什么理由要使用另一个?是否有一个上绘制任何限制ImageButton的是叶ImageView作为唯一可能的选择吗?

我很可能会失去一个按钮的任何功能,如果我选择一个点击ImageViewImageButton

Answers:


158

除了默认样式外,没有其他区别。ImageButton默认情况下具有非空背景。

编辑:而且,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 2011年

别客气!是的,确实没有太大区别,所以我认为是在按钮与按钮之间选择。
迈克尔

20
实际上,根据我的经验,两者之间的另一个区别是,如果您想在ListView的单元格中放置一个可单击的按钮,同时保持该单元格本身为可单击状态,那么使用Imageview会更好。当TextViews和ImageViews没有时,EditTexts和ImageButtons似乎消耗了touch事件。
Ernir Erlingsson

我曾经使用过可点击的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描述的那样,我只是在他的答案中添加细节


这如何回答OP中的各种问题?
flawyte

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.