什么时候应该使用android:clickable?

san*_*one 15 android clickable

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

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

Ovi*_*tcu 7

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

clickable - 定义此视图是否对单击事件做出反应.必须是布尔值,"true"或"false".

因此,例如,如果您只是声明一个WebviewView在您的内部layout.xml并尝试设置OnClickListener此视图,OnClick则除非您指定该属性,否则不会触发该事件:

  android:clickable=true
Run Code Online (Sandbox Code Playgroud)

  • setOnClickListener使View可点击:[docs](http://developer.android.com/reference/android/view/View.html#setOnClickListener(android.view.View.OnClickListener)) (11认同)
  • 我很迷惑.如果我有一个Button或任何其他视图,我从不使用此值,我可以实现onClickListener.我想我没听懂你说的话. (3认同)
  • @bergnam而不是onClickListener(this); (在实现OnClickListener的活动上)你可以放置onClick ="onClick"并使用相同的方法原型[public void onClick(View v)],它不需要你的活动来实现OnClickListener.为什么?为了shiz&giggles.如果您不想使视图启用= false,则可以设置clickable = false,但您不想取消分配/重新分配onClickListener.您可能希望视图在单击时具有不同的绘制状态,但不执行任何操作.设置clickable = true和setOnClickListener都是多余的.两者都有用途. (2认同)

Bar*_*cus 7

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>
Run Code Online (Sandbox Code Playgroud)