为什么在android Studio中单击没有android:OnClick的TextView时触发OnClick事件?
下面的代码来自项目架构示例,您可以看到它为什么在android Studio中单击没有android:OnClick的TextView时触发OnClick事件?,android,Android,下面的代码来自项目架构示例,您可以看到它 LinearLayout有一个android:onClick事件,而TextView控件没有android:onClick事件 我认为当我单击左侧sapce而不是复选框或文本视图控件时,将触发OnClick事件。但事实上,当我单击TextView时,会触发OnClick事件,为什么 顺便说一句,当我点击复选框时,OnClick事件不会被触发 task_item.xml <layout xmlns:android="http://schemas.an
LinearLayout
有一个android:onClick
事件,而TextView
控件没有android:onClick
事件
我认为当我单击左侧sapce而不是复选框
或文本视图
控件时,将触发OnClick
事件。但事实上,当我单击TextView
时,会触发OnClick
事件,为什么
顺便说一句,当我点击复选框时,OnClick
事件不会被触发
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”
添加到文本视图中。这将使它接受单击,但不执行任何操作,而不是将单击传递到它下面的视图。所有未设置onClick的子项都将标记为“不可聚焦”,因此将使用fire onClick of parents来防止此行为,我建议您为title\u文本设置focusable and clickable=true