以下代码来自项目架构-示例,您可以在此处查看。
该LinearLayout
有一个android:onClick
事件,并且TextView
控制没有android:onClick
事件。
我认为OnClick
当我单击左空间而不是CheckBox
或TextView
控件被占用时,将触发该事件。但实际上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] 删除。
我来说两句