什么时候应该使用android:clickable?

时间:2011-10-19 06:55:32

标签: android clickable

我们何时应该在XML中使用android:clickable?我们应该吗? 这种XML声明和代码内声明myButton.setOnClickListener之间有什么区别吗?我已经阅读了文档,但我找不到何时以及为什么要使用此属性。

PS。我正在实施广告SDK并发现他们的开发人员正在使用android:clickableWebView,我很好奇他们为什么要使用它。

6 个答案:

答案 0 :(得分:7)

正如文件所述,据我所知:

  

clickable - 定义此视图是否对点击事件做出反应。   必须是布尔值,“true”或“false”。

例如,如果您只是在Webview中声明Viewlayout.xml,并尝试在此视图上设置OnClickListener,那么OnClick事件就会赢除非你指定属性,否则不会被解雇:

  android:clickable=true

答案 1 :(得分:3)

当您需要使用视图来消费点击次数时,

window.addEventListener('popstate', function (e) { var state = history.state; // back button pressed. close popup if (!state) { $(".modal").css({ "display": "none" }); $('body').css('position', 'relative'); } else { dataModal = $(this).attr("data-modal"); $("#" + dataModal).css({ "display": "flex" }); $('body').css('position', 'fixed'); } }); 似乎很有用,这样他们就不会转到顶视图下方的观看次数。

例如,我有一个clickable,我在特定时间显示在基础FrameLayout上。当用户点击基础RelativeLayout时,焦点将转移到EditText。当EditText仍然显示时真的很烦人。现在,用户不知道为什么弹出键盘或键入的位置。

当我在FrameLayout中设置clickable="true"时,用户就不会再意外点击基础FrameLayout字段。

EditText

答案 2 :(得分:2)

当您在任何view.setOnClickListener上设置View时, 例如:myButton.setOnClickListener(new OnClickListener)默认情况下会被考虑 为clickable="true"

所以你不需要在XML文件中提到它 android:clickable="true"onClick()事件将在不使用的情况下触发 android:clickable="true"

答案 3 :(得分:1)

我遇到了一种可以滑动的活动(向左/向右或向左/向左滑动以向前/向后移动)。在某些屏幕中,有些地方只填充了LinearLayout。布局没有OnClickListener(不需要),导致在LinearLayout上执行滑动操作时不会注册。设置android:clickable="true"解决了问题。

要回答您的问题,如上所示,在某些情况下,使用clickable - 属性可能非常有用。

我不相信您可以说设置OnClickListener与设置clickable - 属性相同,但设置OnClickListener肯定会使View可点击,使clickable - 属性无用(在特定情况下)。

答案 4 :(得分:0)

我不知道他们为什么在这种情况下使用,但是,当我创建一个扩展linearLayout的类时,我不得不使用它。

我创建了自己的“控件”,我希望它可以点击,所以我不得不使用它。

这是您将使用它的一种情况

答案 5 :(得分:0)

仅供参考;当您使用android:onClick=""属性或以编程方式调用setOnClickListener(...)时,View类会将clickable标志设置为true

/**
 * Register a callback to be invoked when this view is clicked. If this view is not
 * clickable, it becomes clickable.
 *
 * @param l The callback that will run
 *
 * @see #setClickable(boolean)
 */
public void setOnClickListener(@Nullable OnClickListener l) {
    if (!isClickable()) {
        setClickable(true);
    }
    getListenerInfo().mOnClickListener = l;
}

关于何时应该自己设置clickable标志,我想主要是在您希望视图可以被点击时,例如在加载某些数据时停止重复通话等。