我们什么时候应该android:clickable在 XML 中使用?我们应该永远吗?
这种 XML 声明和代码内声明之间有什么区别myButton.setOnClickListener吗?我已阅读文档,但我不知道何时以及为什么应该使用此属性。
PS。我正在实施一个广告 SDK,发现他们的开发人员正在使用android:clickable它WebView,我很好奇他们为什么要使用它。
正如文档所述,据我所知:
clickable- 定义此视图是否对点击事件做出反应。必须是布尔值,“真”或“假”。
因此,例如,如果您只是在您的视图中声明 aWebview并尝试在此视图上设置 an ,则除非您指定属性,否则不会触发该事件:Viewlayout.xmlOnClickListenerOnClick
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.setOnClickListeneranyView时,例如: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;
}
至于何时应该自己设置可点击标志,我认为主要是当您希望视图不可点击时,例如在加载某些数据时停止重复调用等。
我不知道他们为什么在这种情况下使用它,但是,当我创建一个扩展线性布局的类时,我不得不使用它。
我创建了自己的“控件”,我希望它可以点击,所以我不得不使用它。
这是您将使用它的一种情况