我们什么时候应该在XML中使用android:clickable
?我们有必要使用吗?
这种XML声明和在代码中使用myButton.setOnClickListener
有什么区别?我已经阅读了文档,但是我仍然无法确定何时以及为什么应该使用此属性。
PS. 我正在实现一个广告SDK,发现他们的开发人员在WebView
中使用了android:clickable
,我很好奇他们为什么要这样做。
clickable
在需要使点击事件不传递到最上层视图下方的视图时非常有用。
例如,我有一个FrameLayout
,它会在某些时候显示在一个底部的RelativeLayout
之上。当用户点击一个底部的EditText
时,焦点会转移到该EditText
,这样会非常烦人,因为此时FrameLayout
仍然显示在顶部。现在用户不知道为什么键盘弹出了或他们正在输入的位置。
当我在FrameLayout
中设置clickable="true"
时,用户就不能再意外地点击底部的EditText
字段了。
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
...>
<EditText>
<EditText>
<EditText>
<!-- FrameLayout with grayed-out background. -->
<FrameLayout
android:id="@+id/sometimes_visible_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80808080"
android:clickable="true"
android:visibility="gone"
android:focusable="true"
...>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
...>
<View>
<View>
</LinearLayout>
</FrameLayout>
</RelativeLayout>
例如,如果您只在
clickable
- 定义此视图是否对点击事件做出反应。 必须是一个布尔值,"true" 或 "false"。
layout.xml
中声明了一个 Webview
或 View
并尝试为这些视图设置 OnClickListener
,除非指定属性:clickable="true"
,否则 OnClick
事件将不会被触发。 android:clickable=true
view.setOnClickListener
,比如说 myButton.setOnClickListener(new OnClickListener)
,默认情况下会将其视为 clickable="true"
。因此,您不需要在 XML 文件中提及像 android:clickable="true"
这样的内容。使用 onClick()
事件时,无需使用 android:clickable="true"
就可以触发该事件。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;
}
OnClickListener
(不需要),导致在LinearLayout
上执行滑动操作时无法注册。设置android:clickable="true"
解决了这个问题。clickable
属性是有用的。OnClickListener
与设置clickable
属性相同,但是设置OnClickListener
确实使View
可点击,在那种特定情况下使clickable
属性无用。LinearLayout
设置为可点击,并且它具有子元素,Android如何区分我是要触发元素的onClick
还是布局的onClick
?它是否像这样工作:如果我触摸元素,则会触发其onClick
,如果我单击空白区域(在布局内部),则会触发LinearLayout的onClick
? - sandaloneonClick
事件 - 我只需要它来注册点击事件以便将它们传递给我的滑动功能。 - kaspermoerch我不知道为什么在那种情况下要使用它,但是当我创建一个继承自LinearLayout的类时,我不得不使用它。
我创建了自己的“控件”,并且希望它可以被点击,所以我必须使用它。
这是你需要使用它的一种情况。
onClickListener
,我为什么要使用android:clickable
?它的使用场景是什么? - sandalone