我们何时应该在XML中使用android:clickable
?我们应该吗?
这种XML声明和代码内声明myButton.setOnClickListener
之间有什么区别吗?我已经阅读了文档,但我找不到何时以及为什么要使用此属性。
PS。我正在实施广告SDK并发现他们的开发人员正在使用android:clickable
和WebView
,我很好奇他们为什么要使用它。
答案 0 :(得分:7)
正如文件所述,据我所知:
clickable
- 定义此视图是否对点击事件做出反应。 必须是布尔值,“true”或“false”。
例如,如果您只是在Webview
中声明View
或layout.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标志,我想主要是在您希望视图不可以被点击时,例如在加载某些数据时停止重复通话等。