为什么在 Android Studio 中单击没有 android:onClick 的 TextView 时会触发 OnClick 事件?

你好CW

以下代码来自项目架构-示例,您可以在此处查看

LinearLayout有一个android:onClick事件,并且TextView控制没有android:onClick事件。

我认为OnClick当我单击左空间而不是CheckBoxTextView控件被占用时,将触发事件但实际上OnClick当我点击时会触发一个事件TextView,为什么?

顺便说一句,OnClick当我点击时不会触发事件CheckBox

task_item.xml

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <import type="android.widget.CompoundButton" />

        <variable
            name="task"
            type="com.example.android.architecture.blueprints.todoapp.data.Task" />

        <variable
            name="viewmodel"
            type="com.example.android.architecture.blueprints.todoapp.tasks.TasksViewModel" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:orientation="horizontal"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingBottom="@dimen/list_item_padding"
        android:paddingTop="@dimen/list_item_padding"
        android:onClick="@{()-> viewmodel.openTask(task.id)}">

        <CheckBox
            android:id="@+id/complete_checkbox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:onClick="@{(view) -> viewmodel.completeTask(task, ((CompoundButton)view).isChecked())}"
            android:checked="@{task.completed}" />

        <TextView
            android:id="@+id/title_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="@dimen/activity_horizontal_margin"
            android:layout_marginStart="@dimen/activity_horizontal_margin"
            android:textAppearance="@style/TextAppearance.AppCompat.Title"
            android:text="@{task.titleForList}"
            app:completedTask="@{task.completed}" />
    </LinearLayout>
</layout>
威尔伯

默认情况下,视图具有该android:clickable="false"属性,除非为它们提供了 onClick 侦听器或该属性明确声明为"true".

当您有重叠视图并且单击一个并且它有 时android:clickable="false",它将忽略单击事件,因此它下面的任何忽略单击事件的视图都将处理单击。在您的情况下,如果单击 TextView,它会忽略它,并且 LinearLayout 的 onClick 将触发。要防止这种行为,请将android:clickable="true"添加android:focusable="true"到 TextView。这将使它接受点击但什么也不做,而不是将点击传递给它下面的视图。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章