클릭 가능한 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

천만에요! 예, 실제로 큰 차이는 없으므로 버튼이 아닌 버튼 사이에서 선택하는 것이 좋습니다.
Michael

20
실제로 내 경험에 따르면 두 가지의 또 다른 차이점은 셀을 클릭 가능한 상태로 유지하면서 클릭 가능한 버튼을 ListView의 셀에 넣으려면 Imageview를 사용하는 것이 훨씬 낫다는 것입니다. TextViews 및 ImageViews가 그렇지 않은 경우 EditTexts 및 ImageButtons가 터치 이벤트를 소비하는 것 같습니다.
Ernir Erlingsson

클릭 가능한 ImageView를 사용했지만 새로운 요구 사항에 따라 ImageButton으로 변경해야하지만 사용 된 이미지가 팽창합니다. ImageButton에서 이미지 팽창을 어떻게 피할 수 있습니까?
codeRider

@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의 다양한 질문에 어떻게 대답합니까?
flawyte

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.