Android中View的点击事件
一、View的clickable属性
使用ConstraintLayout写布局可以减少嵌套,对于有些背景或者点击区域的问题,可以使用View加载背景或者增大点击区域。对于点击事件可以加到View上,并且可以将在View区域内的其它可以点击的View添加上属性android:clickable=“false”。需要注意的是不要在View上添加以下的三个属性:
android:clickable="true"
android:focusableInTouchMode="true"
android:focusable="true"
如果添加了这几个属性,点击View时 会出现点击两次才能响应事件。View的点击背景变化效果,可以使用以下的selector.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/green_00612E" />
<item android:drawable="@color/green_47AF4D"/>
</selector>
RecyclerView的item布局是一个ConstraintLayout,给这个ConstraintLayout添加一个点击效果,也不要在ConstraintLayout中添加上述的三个属性,否则也会出现点击两次才会响应的现象。
二、View的background属性
View手指点上后变色,手指松开后恢复原来的颜色,只需要android:state_pressed="true"和android:state_pressed="false"两个item就行。使用默认的item,即没有android:state_pressed=“false”,则只有点击时的效果,松开后默认的item不起作用。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="@dimen/dp4"/>
<solid android:color="@color/white_AC"/>
<stroke android:color="@color/white_EA" android:width="@dimen/dp1"/>
</shape>
</item>
<item android:state_pressed="false">
<shape android:shape="rectangle">
<corners android:radius="@dimen/dp4"/>
<solid android:color="@color/white"/>
<stroke android:color="@color/white_EA" android:width="@dimen/dp1"/>
</shape>
</item>
</selector>
使用:
<View
android:id="@+id/viewBg"
android:layout_width="0dp"
android:layout_height="@dimen/dp143"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:background="@drawable/bg_sel_corner_white"
android:layout_marginLeft="@dimen/dp12"
android:layout_marginRight="@dimen/dp11"
android:layout_marginTop="@dimen/dp12"
android:paddingBottom="@dimen/dp27"
/>