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

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

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

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

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



답변

그게 무슨 뜻이야?

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

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

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

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

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

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

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


답변

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


답변

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


답변

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();
  }
});


답변

뷰는 외부 키보드, 방향 패드 (리모트 / 게임 컨트롤러) 및 보조 장치 ( 스위치 , 스크린 리더 ) 에도 응답 할 수 있습니다 .


답변

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

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


답변

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

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

setEnabled public void setEnabled (부울 활성화)

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