相关文章推荐
踏实的佛珠  ·  互动白板 ...·  1 年前    · 
细心的鼠标垫  ·  javascript - What ...·  1 年前    · 

在Android中使用卡片视图实现可折叠的视图

CardView对于在容器中显示数据非常有用。它可以包含关于单个对象的内容和动作。一个CardView可以以一种易于视觉化的方式显示适量的数据。

卡片有助于在同一页面上呈现大量的对象。卡片的立面给你的移动应用带来了一个三维的外观,从而丰富了它的外观和感觉。

在这篇文章中,你将了解CardView以及如何设计和定制它。你将实现一个可折叠的视图,当你点击卡片上的图片时,可以展开显示更多信息。

在你开始之前,你应该具备以下条件

  • 使用Java编程语言的Android开发的基本知识。
  • 一个Android IDE。
  • 迁移你的项目以使用AndroidX库。
  • 第一步:创建一个新的Android Studio项目

    使用Empty活动模板创建一个新的Android Studio项目。命名该项目为 折叠卡片视图 。选择 Java 作为语言, API 21 作为最小SDK,然后点击 完成

    第二步:添加所需的依赖项

    要使用 CardView ,你必须添加CardView依赖项。要添加 CardView 依赖项,你需要将Google的Maven仓库添加到你的项目中。

    在你的项目级 build.gradle 文件中,添加谷歌的Maven仓库。

    buildscript {
       repositories {
           google()
    

    要添加 material CardView 依赖项,请在你的应用级build.gradle 文件中添加以下依赖项。

    dependencies {
       implementation 'com.google.android.material:material:1.4.0'
    

    你可以在这里获得最新版本的 material CardView 库。

    第三步:创建根布局

    将你的根布局改为constraint 布局。在约束布局里面,添加CardView

    注意:将卡片视图约束到父方的顶部和底部以及父方的开始和结束。

    第四步:设计卡片视图的样式

    给予CardView一个高度和宽度为0dp的位置。在约束布局中,这使得视图与它的约束尺寸一致。在我们的例子中,CardView 的宽度将和父对象一样大。

    给予CardView一个16dp的水平边距,和一个5dp的角半径。最后,你将使CardView成为其他视图的父布局。要做到这一点,给卡片视图一个开始和结束标签。

    <com.google.android.material.card.MaterialCardView
       android:id="@+id/base_cardview"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       app:cardCornerRadius="5dp"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintStart_toStartOf="parent"
       app:layout_constraintTop_toTopOf="parent"
       app:strokeColor="@color/teal_200"
       android:layout_marginHorizontal="16dp"
       app:strokeWidth="2dp" >
    </com.google.android.material.card.MaterialCardView>
    

    伟大的工作!

    第五步:将视图添加到CardView布局中

    CardView ,添加一个约束性布局。把它的宽度设置为与父级匹配,高度设置为包裹内容。你要在这个约束性布局中添加视图。

    你的代码应该是这样的。

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto"
       xmlns:tools="http://schemas.android.com/tools"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       tools:context=".MainActivity">
       <com.google.android.material.card.MaterialCardView
           android:id="@+id/base_cardview"
           android:layout_width="0dp"
           android:layout_height="wrap_content"
           android:layout_marginHorizontal="16dp"
           app:cardCornerRadius="5dp"
           app:layout_constraintBottom_toBottomOf="parent"
           app:layout_constraintEnd_toEndOf="parent"
           app:layout_constraintStart_toStartOf="parent"
           app:layout_constraintTop_toTopOf="parent"
           app:strokeColor="@color/teal_200"
           app:strokeWidth="2dp">
           <androidx.constraintlayout.widget.ConstraintLayout
               android:layout_width="match_parent"
               android:layout_height="wrap_content">
           </androidx.constraintlayout.widget.ConstraintLayout>
       </com.google.android.material.card.MaterialCardView>
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    在你开始添加更多的视图之前,这里有一个小提示。

    为了方便使用设计模式,把所有包裹内容的父视图改为匹配父视图。这样,你就可以看到一个元素的准确定位。但是,不要忘记把它改回wrap content😊。

    在约束布局内,为视图的四边添加指引。让它们每个都远离视图16dp。

    准则是设计布局时使用的帮助工具。如果你在同一个布局中的许多项目都有相同的边距值,那么它是最有帮助的。我发现指南的一个特点是,它们可以是屏幕的一个百分比。

    这里是你如何创建一个准则。

    这就是准则代码应该有的样子。

    <androidx.constraintlayout.widget.ConstraintLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content">
       <androidx.constraintlayout.widget.Guideline
           android:id="@+id/guideline1"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:orientation="vertical"
           app:layout_constraintGuide_begin="16dp" />
       <androidx.constraintlayout.widget.Guideline
           android:id="@+id/guideline2"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:orientation="vertical"
           app:layout_constraintGuide_end="16dp" />
       <androidx.constraintlayout.widget.Guideline
           android:id="@+id/guideline3"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:orientation="horizontal"
           app:layout_constraintGuide_begin="16dp" />
       <androidx.constraintlayout.widget.Guideline
           android:id="@+id/guideline4"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:orientation="horizontal"
           app:layout_constraintGuide_end="16dp" />
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    第六步:设计折叠式卡片的用户界面

    接下来,我们将建立折叠式卡片的用户界面。

    添加一个ImageView来表示一个信息图标。用一个TextView来表示标签。最后,一个显示更多的图标,当点击时,它将展开或折叠卡片。

    <ImageView
       android:id="@+id/imageView2"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       app:layout_constraintBottom_toTopOf="@+id/guideline4"
       app:layout_constraintStart_toStartOf="@+id/guideline1"
       app:layout_constraintTop_toTopOf="@+id/guideline3"
       app:layout_constraintVertical_bias="0.0"
       app:srcCompat="@android:drawable/ic_menu_info_details"
       app:tint="@color/teal_200" />
    <TextView
       android:id="@+id/textView14"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginStart="8dp"
       android:text="Why should you drink water?"
       android:textColor="#00255E"
       android:textSize="14sp"
       app:layout_constraintBottom_toBottomOf="@+id/imageView2"
       app:layout_constraintStart_toEndOf="@+id/imageView2"
       app:layout_constraintTop_toTopOf="@+id/imageView2"
       app:layout_constraintVertical_bias="0.5" />
    <ImageView
       android:id="@+id/show"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginEnd="4dp"
       android:padding="4dp"
       app:layout_constraintBottom_toBottomOf="@+id/textView14"
       app:layout_constraintEnd_toStartOf="@+id/guideline2"
       app:layout_constraintHorizontal_bias="1.0"
       app:layout_constraintStart_toEndOf="@+id/textView14"
       app:layout_constraintTop_toTopOf="@+id/textView14"
       app:srcCompat="@android:drawable/arrow_down_float"
       app:tint="@color/teal_200" />
    

    请注意我是如何将这些视图限制在指南中的。

    当你点击id为show 的imageView时,卡片视图会展开,显示出更多的细节。

    这就是布局的样子。

    第七步。为扩展的卡片视图设计用户界面

    在这一步,我们将为卡片添加更多的视图。这个视图将代表卡片在扩展状态下的样子。

    使用一个高度为1dp ,背景为#CECECE (或任何你选择的)的视图元素来实现将标题文本与其他可折叠视图分开的直线。

    把它的顶部限制在TextView的底部,并给它一个顶部边距16dp 。在水平方向上,把视图限制在开始和结束准则上,并给它一个宽度0dp ,这样它就和卡片一样宽。

    在这个视图的下面,添加一个TextView和一些要点。你可以使用ImageViews作为子弹。随意添加任何你想要的东西。

    下面是代码的样子。

    <androidx.constraintlayout.widget.ConstraintLayout
               android:layout_width="match_parent"
               android:layout_height="wrap_content">
               <androidx.constraintlayout.widget.Guideline
                   android:id="@+id/guideline1"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:orientation="vertical"
                   app:layout_constraintGuide_begin="16dp" />
               <androidx.constraintlayout.widget.Guideline
                   android:id="@+id/guideline2"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:orientation="vertical"
                   app:layout_constraintGuide_end="16dp" />
               <androidx.constraintlayout.widget.Guideline
                   android:id="@+id/guideline3"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:orientation="horizontal"
                   app:layout_constraintGuide_begin="16dp" />
               <androidx.constraintlayout.widget.Guideline
                   android:id="@+id/guideline4"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:orientation="horizontal"
                   app:layout_constraintGuide_end="16dp" />
    <ImageView
       android:id="@+id/imageView2"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       app:layout_constraintBottom_toTopOf="@+id/guideline4"
       app:layout_constraintStart_toStartOf="@+id/guideline1"
       app:layout_constraintTop_toTopOf="@+id/guideline3"
       app:layout_constraintVertical_bias="0.0"
       app:srcCompat="@android:drawable/ic_menu_info_details"
       app:tint="@color/teal_200" />
               <TextView
                   android:id="@+id/textView14"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginStart="8dp"
                   android:text="Why should you drink water?"
                   android:textColor="#00255E"
                   android:textSize="14sp"
                   app:layout_constraintBottom_toBottomOf="@+id/imageView2"
                   app:layout_constraintStart_toEndOf="@+id/imageView2"
                   app:layout_constraintTop_toTopOf="@+id/imageView2"
                   app:layout_constraintVertical_bias="0.5" />
               <ImageView
                   android:id="@+id/show"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginEnd="4dp"
                   android:padding="4dp"
                   app:layout_constraintBottom_toBottomOf="@+id/textView14"
                   app:layout_constraintEnd_toStartOf="@+id/guideline2"
                   app:layout_constraintHorizontal_bias="1.0"
                   app:layout_constraintStart_toEndOf="@+id/textView14"
                   app:layout_constraintTop_toTopOf="@+id/textView14"
                   app:srcCompat="@android:drawable/arrow_down_float"
                   app:tint="@color/teal_200" />
                   android:id="@+id/view3"
                   android:layout_width="0dp"
                   android:layout_height="1dp"
                   android:layout_marginTop="16dp"
                   android:background="#CECECE"
                   app:layout_constraintEnd_toStartOf="@+id/guideline2"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toBottomOf="@+id/textView14" />
               <TextView
                   android:id="@+id/textView15"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginTop="16dp"
                   android:text="It's no magic bullet, but the benefits of water are many."
                   android:textColor="#838383"
                   android:textSize="12sp"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toBottomOf="@+id/view3" />
               <ImageView
                   android:id="@+id/imageView9"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   app:layout_constraintBottom_toBottomOf="@+id/textView16"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toTopOf="@+id/textView16"
                   app:srcCompat="@android:drawable/presence_invisible"
                   app:tint="@color/teal_200" />
               <TextView
                   android:id="@+id/textView16"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginStart="8dp"
                   android:layout_marginTop="12dp"
                   android:text="Maintain the Balance of Body Fluids."
                   android:textColor="#838383"
                   android:textSize="12sp"
                   app:layout_constraintStart_toEndOf="@+id/imageView9"
                   app:layout_constraintTop_toBottomOf="@+id/textView15" />
               <ImageView
                   android:id="@+id/imageView10"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   app:layout_constraintBottom_toBottomOf="@+id/textView17"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toTopOf="@+id/textView17"
                   app:srcCompat="@android:drawable/presence_invisible"
                   app:tint="@color/teal_200" />
               <TextView
                   android:id="@+id/textView17"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginStart="8dp"
                   android:layout_marginTop="12dp"
                   android:text="Energize Muscles"
                   android:textColor="#838383"
                   android:textSize="12sp"
                   app:layout_constraintStart_toEndOf="@+id/imageView10"
                   app:layout_constraintTop_toBottomOf="@+id/textView16" />
               <ImageView
                   android:id="@+id/imageView11"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   app:layout_constraintBottom_toBottomOf="@+id/textView18"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toTopOf="@+id/textView18"
                   app:srcCompat="@android:drawable/presence_invisible"
                   app:tint="@color/teal_200" />
               <TextView
                   android:id="@+id/textView18"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginStart="8dp"
                   android:layout_marginTop="12dp"
                   android:text="Keep Skin Looking Good"
                   android:textColor="#838383"
                   android:textSize="12sp"
                   app:layout_constraintStart_toEndOf="@+id/imageView11"
                   app:layout_constraintTop_toBottomOf="@+id/textView17" />
               <TextView
                   android:id="@+id/textView19"
                   android:layout_width="0dp"
                   android:layout_height="wrap_content"
                   android:layout_marginTop="12dp"
                   android:text="If you think you need to be drinking more, here are some tips to increase your fluid intake and reap the benefits of water:"
                   android:textColor="#838383"
                   android:textSize="12sp"
                   app:layout_constraintEnd_toStartOf="@+id/guideline2"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toBottomOf="@+id/textView18" />
                   android:id="@+id/view4"
                   android:layout_width="0dp"
                   android:layout_height="1dp"
                   android:layout_marginTop="16dp"
                   android:background="#CECECE"
                   app:layout_constraintEnd_toStartOf="@+id/guideline2"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toBottomOf="@+id/textView19" />
               <ImageView
                   android:id="@+id/imageView12"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toTopOf="@+id/textView20"
                   app:srcCompat="@android:drawable/presence_invisible"
                   app:tint="@color/teal_200" />
               <TextView
                   android:id="@+id/textView20"
                   android:layout_width="0dp"
                   android:layout_height="wrap_content"
                   android:layout_marginStart="8dp"
                   android:layout_marginTop="12dp"
                   android:text="Have a beverage with every snack or meal, Eat more fruits and vegetables, and Keep a bottle of water with you.
                   android:textColor="#838383"
                   android:textSize="12sp"
                   app:layout_constraintBottom_toTopOf="@+id/guideline4"
                   app:layout_constraintEnd_toStartOf="@+id/guideline2"
                   app:layout_constraintStart_toEndOf="@+id/imageView12"
                   app:layout_constraintTop_toBottomOf="@+id/view4" />
               <androidx.constraintlayout.widget.Group
                   android:id="@+id/card_group"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:visibility="visible"
                 app:constraint_referenced_ids="textView15,view3,imageView9,textView16,imageView10,textView17,imageView11,textView18,textView19,view4,imageView12,textView20" />
           </androidx.constraintlayout.widget.ConstraintLayout>
    

    呜呼!当你运行该项目时,布局应该是这样的。

    当卡片被折叠时,你会想隐藏这些视图。这里有一个问题。控制这12个视图中的每一个的可见性将是一种负担和重复的工作。

    现在,这就是组出现的地方。有了组,你可以将所有这些视图分组,并作为一个视图处理它们的可见性。你可以通过设置组的可见性来设置所有12个视图的可见性。

    第八步:为隐藏的视图创建一个组

    这里是如何创建组的。

    很酷,对吗?

    现在给该组一个idcard_group

    你的整个布局代码应该看起来像这样。

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto"
       xmlns:tools="http://schemas.android.com/tools"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       tools:context=".MainActivity">
       <com.google.android.material.card.MaterialCardView
           android:id="@+id/base_cardview"
           android:layout_width="0dp"
           android:layout_height="wrap_content"
           android:layout_marginHorizontal="16dp"
           app:cardCornerRadius="5dp"
           app:layout_constraintBottom_toBottomOf="parent"
           app:layout_constraintEnd_toEndOf="parent"
           app:layout_constraintStart_toStartOf="parent"
           app:layout_constraintTop_toTopOf="parent"
           app:strokeColor="@color/teal_200"
           app:strokeWidth="2dp">
           <androidx.constraintlayout.widget.ConstraintLayout
               android:layout_width="match_parent"
               android:layout_height="wrap_content">
               <androidx.constraintlayout.widget.Guideline
                   android:id="@+id/guideline1"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:orientation="vertical"
                   app:layout_constraintGuide_begin="16dp" />
               <androidx.constraintlayout.widget.Guideline
                   android:id="@+id/guideline2"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:orientation="vertical"
                   app:layout_constraintGuide_end="16dp" />
               <androidx.constraintlayout.widget.Guideline
                   android:id="@+id/guideline3"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:orientation="horizontal"
                   app:layout_constraintGuide_begin="16dp" />
               <androidx.constraintlayout.widget.Guideline
                   android:id="@+id/guideline4"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:orientation="horizontal"
                   app:layout_constraintGuide_end="16dp" />
               <ImageView
                   android:id="@+id/imageView2"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   app:layout_constraintBottom_toTopOf="@+id/guideline4"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toTopOf="@+id/guideline3"
                   app:layout_constraintVertical_bias="0.0"
                   app:srcCompat="@android:drawable/ic_menu_info_details"
                   app:tint="@color/teal_200" />
               <TextView
                   android:id="@+id/textView14"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginStart="8dp"
                   android:text="Why should you drink water?"
                   android:textColor="#00255E"
                   android:textSize="14sp"
                   app:layout_constraintBottom_toBottomOf="@+id/imageView2"
                   app:layout_constraintStart_toEndOf="@+id/imageView2"
                   app:layout_constraintTop_toTopOf="@+id/imageView2"
                   app:layout_constraintVertical_bias="0.5" />
               <ImageView
                   android:id="@+id/show"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginEnd="4dp"
                   android:padding="4dp"
                   app:layout_constraintBottom_toBottomOf="@+id/textView14"
                   app:layout_constraintEnd_toStartOf="@+id/guideline2"
                   app:layout_constraintHorizontal_bias="1.0"
                   app:layout_constraintStart_toEndOf="@+id/textView14"
                   app:layout_constraintTop_toTopOf="@+id/textView14"
                   app:srcCompat="@android:drawable/arrow_down_float"
                   app:tint="@color/teal_200" />
                   android:id="@+id/view3"
                   android:layout_width="0dp"
                   android:layout_height="1dp"
                   android:layout_marginTop="16dp"
                   android:background="#CECECE"
                   app:layout_constraintEnd_toStartOf="@+id/guideline2"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toBottomOf="@+id/textView14" />
               <TextView
                   android:id="@+id/textView15"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginTop="16dp"
                   android:text="It's no magic bullet, but the benefits of water are many.
                   android:textColor="#838383"
                   android:textSize="12sp"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toBottomOf="@+id/view3" />
               <ImageView
                   android:id="@+id/imageView9"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   app:layout_constraintBottom_toBottomOf="@+id/textView16"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toTopOf="@+id/textView16"
                   app:srcCompat="@android:drawable/presence_invisible"
                   app:tint="@color/teal_200" />
               <TextView
                   android:id="@+id/textView16"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginStart="8dp"
                   android:layout_marginTop="12dp"
                   android:text="Maintain the Balance of Body Fluids."
                   android:textColor="#838383"
                   android:textSize="12sp"
                   app:layout_constraintStart_toEndOf="@+id/imageView9"
                   app:layout_constraintTop_toBottomOf="@+id/textView15" />
               <ImageView
                   android:id="@+id/imageView10"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   app:layout_constraintBottom_toBottomOf="@+id/textView17"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toTopOf="@+id/textView17"
                   app:srcCompat="@android:drawable/presence_invisible"
                   app:tint="@color/teal_200" />
               <TextView
                   android:id="@+id/textView17"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginStart="8dp"
                   android:layout_marginTop="12dp"
                   android:text="Energize Muscles"
                   android:textColor="#838383"
                   android:textSize="12sp"
                   app:layout_constraintStart_toEndOf="@+id/imageView10"
                   app:layout_constraintTop_toBottomOf="@+id/textView16" />
               <ImageView
                   android:id="@+id/imageView11"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   app:layout_constraintBottom_toBottomOf="@+id/textView18"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toTopOf="@+id/textView18"
                   app:srcCompat="@android:drawable/presence_invisible"
                   app:tint="@color/teal_200" />
               <TextView
                   android:id="@+id/textView18"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginStart="8dp"
                   android:layout_marginTop="12dp"
                   android:text="Keep Skin Looking Good"
                   android:textColor="#838383"
                   android:textSize="12sp"
                   app:layout_constraintStart_toEndOf="@+id/imageView11"
                   app:layout_constraintTop_toBottomOf="@+id/textView17" />
               <TextView
                   android:id="@+id/textView19"
                   android:layout_width="0dp"
                   android:layout_height="wrap_content"
                   android:layout_marginTop="12dp"
                   android:text="If you think you need to be drinking more, here are some tips to increase your fluid intake and reap the benefits of water:"
                   android:textColor="#838383"
                   android:textSize="12sp"
                   app:layout_constraintEnd_toStartOf="@+id/guideline2"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toBottomOf="@+id/textView18" />
                   android:id="@+id/view4"
                   android:layout_width="0dp"
                   android:layout_height="1dp"
                   android:layout_marginTop="16dp"
                   android:background="#CECECE"
                   app:layout_constraintEnd_toStartOf="@+id/guideline2"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toBottomOf="@+id/textView19" />
               <ImageView
                   android:id="@+id/imageView12"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   app:layout_constraintStart_toStartOf="@+id/guideline1"
                   app:layout_constraintTop_toTopOf="@+id/textView20"
                   app:srcCompat="@android:drawable/presence_invisible"
                   app:tint="@color/teal_200" />
               <TextView
                   android:id="@+id/textView20"
                   android:layout_width="0dp"
                   android:layout_height="wrap_content"
                   android:layout_marginStart="8dp"
                   android:layout_marginTop="12dp"
                   android:text="Have a beverage with every snack or meal, Eat more fruits and vegetables, and Keep a bottle of water with you.
                   android:textColor="#838383"
                   android:textSize="12sp"
                   app:layout_constraintBottom_toTopOf="@+id/guideline4"
                   app:layout_constraintEnd_toStartOf="@+id/guideline2"
                   app:layout_constraintStart_toEndOf="@+id/imageView12"
                   app:layout_constraintTop_toBottomOf="@+id/view4" />
               <androidx.constraintlayout.widget.Group
                   android:id="@+id/card_group"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:visibility="gone"
                   app:constraint_referenced_ids="textView15,view3,imageView9,textView16,imageView10,textView17,imageView11,textView18,textView19,view4,imageView12,textView20"
                   tools:visibility="gone" />
           </androidx.constraintlayout.widget.ConstraintLayout>
       </com.google.android.material.card.MaterialCardView>
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    你都准备好了!现在是使用JAVA的时候了。

    第九步:给ImageView添加OnClick监听器

    在这一步,我们将为显示imageView ,设置一个onClick 的监听器。

    在你的MainActivity.java 文件中,添加以下几行代码。

    public class MainActivity extends AppCompatActivity {
       CardView cardView;
       ImageView arrow;
       Group hiddenGroup;
       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
           cardView = findViewById(R.id.base_cardview);
           arrow = findViewById(R.id.show);
           hiddenGroup = findViewById(R.id.card_group);
           arrow.setOnClickListener(view -> {
               if(hiddenGroup.getVisibility() == View.VISIBLE){
                   TransitionManager.beginDelayedTransition(cardView, new AutoTransition());
                   hiddenGroup.setVisibility(View.GONE);
                   arrow.setImageResource(android.R.drawable.arrow_down_float);
               else {
                   TransitionManager.beginDelayedTransition(cardView, new AutoTransition());
                   hiddenGroup.setVisibility(View.VISIBLE);
                   arrow.setImageResource(android.R.drawable.arrow_up_float);
    

    让我们来驳斥这段代码。

    首先,我们引用了执行动作的视图。这些视图是base_cardViewshow ImageView和card_group 。记住,你不需要再引用所有12个视图。这是因为你已经把它们分组到了card_group

    接下来,在show ImageView上设置一个onClickListener 。当这个图片被点击时,你会希望显示或隐藏card_group

    onClickListener 里面,将CardView 作为根视图来运行过渡,这将使卡片的折叠和扩展变得更漂亮,并给它一个动画效果。

    最后,检查该组的可见性是否可见。如果是,你就把它的可见性设置为消失,并把ImageView的图像资源改为arrow_down_float 。这看起来有点像一个显示更多的图标。

    否则,如果该组是不可见的,那么你就会想显示它。因此将组的可见性改为可见。将ImageView的图像资源设置为arrow_up_float ,这看起来像一个不显示的图标。

    让我们运行我们的应用程序。我们的可折叠的CardView看起来应该是这样的。

    CardView丰富了你的应用程序的用户界面的外观。阴影和圆角的默认实现是一个很大的优点。然而,CardView的设计是为了在其内部容纳一个子视图。

    你可以在卡片视图中添加另一个布局来管理子视图,就像我们在这里做的。