如何在 XML 中设置 Clickable 属性?

How setting Clickable attribute in XML works?

我在 Activity 中有一个 Button:

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"      
    android:text="Test"      
    android:onClick="onClickEvent"
    android:clickable="false"
    android:focusable="false" />

和一个方法:

public void onClickEvent(View view) {

    Toast.makeText(this, "Hey!!", Toast.LENGTH_SHORT).show();
}

尽管在 xml 中将 clickable 属性设置为 false,为什么点击事件仍然有效? 有什么东西覆盖它吗?

In spite of setting clickable to false, why click event should work?

setClickListener 重置该标志。

public void More ...setOnClickListener(OnClickListener l) {
2318        if (!isClickable()) {
2319            setClickable(true);
2320        }
2321        mOnClickListener = l;
2322    }

是的 android:onClick="onClickEvent" 内部调用 setOnClickListener

根据the most upvoted answer here,由于全局 setOnClickListener 方法,clickable 返回 true。

目前无法测试,但也许您可以创建两个单独的侦听器,并在需要时切换按钮当前使用的侦听器。因此,当您想要禁用点击它时,您可以切换到一个什么都不做的监听器。

对我来说有点矫枉过正,我认为最干净的方法是使用 setEnabled(false),但如果您真的不想使用 setEnabled,请尝试使用 listeners。