我是Android新手,现在正在编写我的第一个应用程序。我有一个ListView渲染一系列的项目,每个项目有多个textview。我希望每个项目在ListView是可点击的,并动画点击。
我有selectableItemBackground属性,它在一个TextView-by-TextView的基础上完美地工作。然而,这意味着点击动画只出现在特定的TextView上,而我希望它出现在整个列表项本身。
这是我的Android视图。我知道这种行为是由我把selectableItemBackground属性放在TextView元素上引起的,我只是不知道还能把它放在哪里才能达到我想要的效果。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
android:gravity="center">
<TextView
android:id="@+id/past_game_update_timestamp"
android:foreground="?android:attr/selectableItemBackground"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:clickable="true"
android:padding="@dimen/small_padding"
android:textSize="@dimen/small_font_size" />
<TextView
android:id="@+id/past_game_start_timestamp"
android:foreground="?android:attr/selectableItemBackground"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:clickable="true"
android:padding="@dimen/small_padding"
android:textSize="@dimen/small_font_size" />
</LinearLayout>
作为我从你的问题中理解的一部分。你希望你的整个视图都有一个onClick动画。为此,您有两个选项:
在大多数情况下,您应该通过将视图背景指定为
在视图XML中应用此功能:?android:attr/selectableItemBackground
for a bounded ripple.?android:attr/selectableItemBackgroundBorderless
为波纹延伸到视野之外。它会被最近的父母所吸引和约束
注意:selectableItemBackgroundBorderless是一个新引入的属性
请检查选项2
好了,在我评论了上面的答案之后,我弄清楚了剩下的部分。我需要将LinearLayout设置为可点击的&focusable,我需要在TextViews上禁用clickable/focusable。我还需要将它们设置为duplicateParentState。所有这些都允许selectableItemBackground在LinearLayout上工作。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
android:foreground="?android:attr/selectableItemBackground"
android:focusable="true"
android:clickable="true"
android:gravity="center"
android:padding="@dimen/small_padding">
<TextView
android:id="@+id/past_game_update_timestamp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:duplicateParentState="true"
android:focusable="false"
android:clickable="false"
android:textSize="@dimen/small_font_size" />
<TextView
android:id="@+id/past_game_start_timestamp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:duplicateParentState="true"
android:focusable="false"
android:clickable="false"
android:textSize="@dimen/small_font_size" />
</LinearLayout>
您可以将?android:attr/selectableItemBackground
移动到项目布局的根视图中。
像这样:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
android:gravity="center"
android:focusable="true"
android:clickable="true"
android:background="?android:attr/selectableItemBackground">
<TextView
android:id="@+id/past_game_update_timestamp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/small_padding"
android:textSize="@dimen/small_font_size" />
<TextView
android:id="@+id/past_game_start_timestamp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/small_padding"
android:textSize="@dimen/small_font_size" />
</LinearLayout>
别忘了加android:focusable="true"
和android:clickable="true"