我们什么时候应该android:clickable
在 XML 中使用?我们应该永远吗?
这种 XML 声明和代码内声明之间有什么区别myButton.setOnClickListener
吗?我已阅读文档,但我不知道何时以及为什么应该使用此属性。
PS。我正在实施一个广告 SDK,发现他们的开发人员正在使用android:clickable
它WebView
,我很好奇他们为什么要使用它。
正如文档所述,据我所知:
clickable
- 定义此视图是否对点击事件做出反应。必须是布尔值,“真”或“假”。
因此,例如,如果您只是在您的视图中声明 aWebview
并尝试在此视图上设置 an ,则除非您指定属性,否则不会触发该事件:View
layout.xml
OnClickListener
OnClick
android:clickable=true
clickable
当您需要一个视图来消耗点击时似乎很有用,这样他们就不会转到顶视图下方的视图。
例如,我有一个在特定时间FrameLayout
显示在底层证券上的。RelativeLayout
当用户点击一个底层EditText
时,焦点将转移到那个EditText
。FrameLayout
当仍然显示时真的很烦人。现在用户不知道为什么会弹出一个键盘或者他们在哪里打字。
当我在 中设置clickable="true"
时FrameLayout
,用户不能再不小心点击底层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>
当您设置view.setOnClickListener
anyView
时,例如:myButton.setOnClickListener(new OnClickListener)
默认情况下它被视为clickable="true"
.
因此,您无需在 XML 文件中提及
android:clickable="true"
. 该onClick()
事件将在不使用的情况下触发
android:clickable="true"
。
我遇到过一种情况,我使活动可滑动(向左/向右或向右/向左滑动以向前/向后移动)。在某些屏幕中,有些地方只填充了 LinearLayout。没有OnClickListener
布局(不需要)导致在LinearLayout
. 设置android:clickable="true"
解决了问题。
为了回答您的问题,如上所示,在某些情况下使用clickable
-attribute 可能很有用。
我不相信您可以说设置 anOnClickListener
与设置clickable
-attribute 相同,但设置 theOnClickListener
肯定会使View
可点击,使clickable
-attribute 无用(在那种特定情况下)。
供参考; 当您使用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;
}
至于何时应该自己设置可点击标志,我认为主要是当您希望视图不可点击时,例如在加载某些数据时停止重复调用等。
我不知道他们为什么在这种情况下使用它,但是,当我创建一个扩展线性布局的类时,我不得不使用它。
我创建了自己的“控件”,我希望它可以点击,所以我不得不使用它。
这是您将使用它的一种情况