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


149

間の有意な差がある場合、私は思ったんだけどImageViewクリック可能に設定していますと比べて、ImageButton

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

私はクリッカブルを選ぶ場合、私はおそらく、ボタンのいずれかの機能を失うことになるImageViewオーバーImageButton

回答:


158

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

編集:また、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
ご回答有難うございます。自分でコードを実行するときに、あなたが私が見つけた以上のものをくれました。結局のところ、2つの間の選択は、カスタマイズなしで使用できるデフォルトプロパティの量に依存します。
yjw 2011年

どういたしまして!確かに、それほど大きな違いはないので、選択はボタンかボタンではないかと思います。
マイケル、

20
実際、私の経験では、2つ間のもう1つの違いは、セル自体をクリック可能として維持しながら、クリック可能なボタンをListViewのセルに配置したい場合、Imageviewの方がはるかに優れているということです。EditViewsとImageButtonsは、TextViewsとImageViewsが消費しないときにタッチイベントを消費するようです。
Ernir Erlingsson 2012年

クリック可能なImageViewを使用していましたが、新しい要件に従ってImageButtonに変更する必要がありますが、使用される画像はInflatedになります。ImageButtonで画像の膨張を回避するにはどうすればよいですか?
codeRider 2015年

@codeRiderあなたが何を言っているのか理解できません。配置が異なるImageView場合は、scaleType明示的に指定できます。
Michael

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のさまざまな質問にどのように答えますか?
フラウィート

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.