web-dev-qa-db-ja.com

クリック可能なImageViewとImageButtonの違い

ImageViewと比較して、クリック可能に設定されているImageButtonに何か大きな違いがあるのか​​疑問に思っています。

一方を他方よりも使用する理由はありますか? ImageButtonを唯一の可能なオプションとして残すImageViewのドロウアブルに制限はありますか?

クリック可能なImageView over ImageButtonを選択すると、ボタンの機能が失われる可能性がありますか?

140
yjw

デフォルトのスタイルを除いて、違いはありません。 ImageButtonには、デフォルトでnull以外の背景があります。

[〜#〜] edit [〜#〜]:また、ImageButton.onSetAlpha()メソッドは常にfalseを返し、scaleTypecenterに設定され、それは常にフォーカス可能として膨張します。

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>
150
Michael

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が説明するように、私は彼の答えに詳細を追加するだけです

20
Xar E Ahmer

クリックしたときのボタンクリックの効果は、imageButtonにはありますが、imageViewにはありません。

7