22

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

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

4

6 回答 6

9

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

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

因此,例如,如果您只是在您的视图中声明 aWebview并尝试在此视图上设置 an ,则除非您指定属性,否则不会触发该事件:Viewlayout.xmlOnClickListenerOnClick

  android:clickable=true
于 2011-10-19T07:04:31.157 回答
8

clickable当您需要一个视图来消耗点击时似乎很有用,这样他们就不会转到顶视图下方的视图。

例如,我有一个在特定时间FrameLayout显示在底层证券上的。RelativeLayout当用户点击一个底层EditText时,焦点将转移到那个EditTextFrameLayout当仍然显示时真的很烦人。现在用户不知道为什么会弹出一个键盘或者他们在哪里打字。

当我在 中设置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>
于 2017-09-07T17:07:54.430 回答
2

当您设置view.setOnClickListeneranyView时,例如:myButton.setOnClickListener(new OnClickListener)默认情况下它被视为clickable="true".

因此,您无需在 XML 文件中提及 android:clickable="true". 该onClick()事件将在不使用的情况下触发 android:clickable="true"

于 2017-06-13T14:37:56.460 回答
1

我遇到过一种情况,我使活动可滑动(向左/向右或向右/向左滑动以向前/向后移动)。在某些屏幕中,有些地方只填充了 LinearLayout。没有OnClickListener布局(不需要)导致在LinearLayout. 设置android:clickable="true"解决了问题。

为了回答您的问题,如上所示,在某些情况下使用clickable-attribute 可能很有用。

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

于 2011-10-19T07:05:36.787 回答
1

供参考; 当您使用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;
}

至于何时应该自己设置可点击标志,我认为主要是当您希望视图不可点击时,例如在加载某些数据时停止重复调用等。

于 2019-05-15T03:16:25.067 回答
0

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

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

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

于 2011-10-19T07:05:42.603 回答