Android -如何将selectableItemBackground应用到整个ListView项目?



我是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中应用此功能:
  1. ?android:attr/selectableItemBackgroundfor a bounded ripple.
  2. ?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"

相关内容

  • 没有找到相关文章

最新更新