setEnabled () 대 setClickable (), 차이점은 무엇입니까?


78

지금까지 사용자가 버튼을 누르는 것을 막고 싶을 때 button.setClickable(false); 하고 일반적으로 텍스트를 일종의 회색으로 변경하여 사용자에게 버튼이 비활성화되었음을 알립니다. 오늘 나는 그 setEnabled()재산을 우연히 발견 했습니다.

그래서 아래의 방법에 대한 설명을보기 위해 설명서로 이동했습니다.

setEnabled(boolean enabled)
   Set the enabled state of this view.

이것은 무엇을 의미합니까? 활성화 상태 / 클릭 가능 상태와 비활성화 상태 / 클릭 불가능 상태의 차이점은 무엇입니까? 누군가 내가 이전에하던 작업을 수행하는 것과 클릭 가능한 속성을 사용하는 것과 setEnabled()속성을 사용하는 것의 차이점이 무엇인지 설명해 주 시겠습니까? 언제 사용해야합니까? Stack Overflow를 검색했지만 관련 내용을 찾을 수 없습니다.


5
나는 setEnabled (false)가 View를 클릭 할 수없고 초점을 맞출 수 없도록 만들어 완전히 잠긴 것을 의미한다고 생각합니다. 이 버튼을 시각적으로 "해제"한다 때문에 또한에서 setEnabled (FALSE)는 버튼 인 경우 바람직한 방법이다
Droidman

당신은 무엇을 뜻합니까 "비활성화"는 버튼이 시각적으로 만드는 ..since "어떻게 사용자 정의 셀렉터 사용하는 경우는 무엇을 시각적으로 변경하고합니까???
에밀 ADZ

사용자 지정 선택기에 대해 확실하지 않고 테스트하지 않았습니다. 당신이 손으로 그것을 할 필요가 없습니다 그러나 표준 버튼의 경우, 그것은 반투명 얻는다
Droidman

답변:


79

그게 무슨 뜻이야?

"GUI 위젯"에 대한 Wikipedia 페이지 인용 :

애플리케이션의 맥락에서 위젯은 주어진 시점에서 활성화 또는 비활성화 될 수 있습니다. 활성화 된 위젯에는 키 입력 또는 마우스 동작과 같은 이벤트에 응답 할 수있는 기능이 있습니다. 이러한 이벤트에 응답 할 수없는 위젯은 비활성화 된 것으로 간주됩니다. 비활성화 된 위젯의 모양은 일반적으로 활성화 된 위젯과 다릅니다. 비활성화 된 위젯은 더 밝은 색상으로 그려 지거나 어떤 식 으로든 시각적으로 가려 질 수 있습니다. 예를 보려면 오른쪽 이미지를 참조하십시오.

이 개념은 수십 년 동안 존재 해 왔으며 대부분의 GUI 프레임 워크에서 찾을 수 있습니다.

활성화 상태 / 클릭 가능 상태와 비활성화 상태 / 클릭 불가능 상태의 차이점은 무엇입니까?

Android에서 클릭 할 수없는 위젯은 클릭 이벤트에 응답하지 않습니다. 비활성화 된 위젯은 클릭 할 수있을뿐만 아니라 비활성화되었음을 시각적으로 나타냅니다.

의미 : ".. 버튼을 시각적으로"비활성화 "하기 때문에 어떻게 시각적으로 변경됩니까?

무엇하게 Button유사한 모양과 응답하는 것은 ButtonA는 그 배경이다 StateListDrawable. 비활성화 상태에 사용되는 특정 이미지가 있습니다.


@ Maver1ck : Button StateListDrawable확실히 비활성화 된 상태입니다. github.com/android/platform_frameworks_base/blob/master/core/…Button 클래스 에 의해 적용되는 다른 효과가있을 수 있지만 전혀 알지 못합니다.
CommonsWare 2013 년

방금 작은 테스트를했는데 버튼의 경우 텍스트 색상도 변경된 것 같습니다. 버튼 활성화를 거짓으로 설정하면 회색이됩니다.
FD_ 2013 년

기본적으로 사용자 지정 선택기를 사용하면? 이 특정 버튼에 setEnable () 메서드를 사용하고이 변경에 대한 피드백을 받으려면 특정 드로어 블을 지정해야합니까?
Emil Adz 2013 년

@FD_ : 아, 예, 그것은 TextView비활성화 된 행동입니다.Button 상속 된 입니다. 텍스트 색상은 종종 ColorStateList개체이며 활성화 된 상태와 비활성화 된 상태를 가질 수도 있습니다. 죄송합니다. 잊어 버렸습니다.
CommonsWare

2
@EmilAdz : 텍스트 색상을 변경하거나 버튼 배경을 변경하는 경우 ColorStateList또는 StateListDrawable비활성화 상태에 대한 적절한 항목을 원할 것 입니다. 해당 항목은를 setEnabled(false)호출 할 때 사용 되거나 android:enabled="false"레이아웃에서 사용됩니다.
CommonsWare

6

따라서 기본적으로 활성화 된 false는 런타임에 설정 될 때 응답 및 클릭 가능한 false 여전히 응답에 응답하지 않으며 방금 시도해 보았습니다.


3

내가 다른 곳에서 언급하지 않은 큰 차이점은 뷰가 겹치는 것입니다. clickable = true 및 enabled = false 인보기는 뒤에있는보기를 누를 수 없습니다. 그러나 clickable = false 인보기는 뒤에있는보기를 누를 수 있습니다.


2

Dilip이 말했듯이 setClickable은 런타임에 설정되면 작동하지 않습니다. 다음은 작동하도록하는 트릭입니다.

ToggleButton toggle = ...
toggle.setOnTouchListener(new ToggleButton.OnTouchListener() {

  @Override
  public boolean onTouch(View v, MotionEvent event) {
     // If true is returned, the event is eated by the TouchListener
     return !v.isClickable();
  }
});


0

차이점은 위에 나열되어 있지만 팁이 있습니다. setOnClickListener () 후에 setClickable ()을 사용하십시오. 이것 때문에:

public void setOnClickListener(@Nullable OnClickListener l) {
    if (!isClickable()) {
        setClickable(true);
    }
    getListenerInfo().mOnClickListener = l;
}

0

setClickable public void setClickable (부울 클릭 가능)

특정보기에 대한 클릭 이벤트를 활성화하거나 비활성화합니다. 보기를 클릭 할 수있는 경우 클릭 할 때마다 상태가 "눌려 짐"으로 변경됩니다. 이보기 속성이 비활성화되면 상태가 변경되지 않습니다.

setEnabled public void setEnabled (부울 활성화)

이 뷰의 활성화 상태를 설정합니다. 특정 뷰가 활성화되도록 설정된 경우 매개 변수에 true를 전달하고 그렇지 않으면 false를 전달합니다.

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