展开并折叠CardView

Rob*_*gor 30 android android-cardview

扩展CardView的正确方法是什么?

例

Mad*_*hur 27

使用带有cardview的可扩展列表视图

甚至

您可以使用换行内容作为cardview的高度,并在标题下方使用 textview,因此单击使textview 可见 ,反之亦然.

但是设计不是很糟糕吗?

如果你在展开或折叠时给出一些过渡或动画,那就不是了

如果你想看到一些默认转换,那么只需在父布局中编写android:animateLayoutChanges ="true".


Hei*_*erg 18

如果您在ListView或RecyclerView中使用CardViews,请参阅我的答案以获取建议的方法: RecyclerView展开/折叠项目

如果您只是使用CardView,请在您的onviewListener上执行此操作:

TransitionManager.beginDelayedTransition(cardview);
detailsView.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)

默认情况下,将您的detailsView的可见性保持为xml中的GONE.


Ray*_*ter 15

我用了一个cardview和扩大部分ITEM_DESCRIPTION在cardview.对于展开部分,我在标题部分(LinearLayout/item_description_layout)下面创建了一个TextView ,当用户单击标题布局时,将调用展开/折叠方法.以下是cardview中的代码:

<LinearLayout
  android:id="@+id/item_description_layout"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:gravity="center"
  android:minHeight="48dp"
  android:paddingStart="16dp"
  android:paddingEnd="16dp"
  android:orientation="horizontal">

  <TextView
      android:id="@+id/item_description_title"
      android:layout_width="0dp"
      android:layout_height="match_parent"
      android:layout_weight="0.9"
      android:gravity="center_vertical"
      android:text="@string/description"/>

  <ImageView
      android:id="@+id/item_description_img"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="0.1"
      android:layout_gravity="center_vertical|end"
      app:srcCompat="@drawable/ic_expand_more_black_24dp"/>

</LinearLayout>

<TextView
  android:id="@+id/item_description"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:paddingStart="16dp"
  android:paddingEnd="16dp"
  android:paddingBottom="16dp"
  android:gravity="center_vertical"
  android:visibility="gone"
  tools:text="description goes here"/>  
Run Code Online (Sandbox Code Playgroud)

这是被调用的方法.我还添加了一个ObjectAnimator来处理块的展开/折叠动画.这是一个使用描述文本长度的简单动画.

void collapseExpandTextView() {
    if (mItemDescription.getVisibility() == View.GONE) {
        // it's collapsed - expand it
        mItemDescription.setVisibility(View.VISIBLE);
        mDescriptionImg.setImageResource(R.drawable.ic_expand_less_black_24dp);
    } else {
        // it's expanded - collapse it
        mItemDescription.setVisibility(View.GONE);
        mDescriptionImg.setImageResource(R.drawable.ic_expand_more_black_24dp);
    }

    ObjectAnimator animation = ObjectAnimator.ofInt(mItemDescription, "maxLines", mItemDescription.getMaxLines());
    animation.setDuration(200).start();
} 
Run Code Online (Sandbox Code Playgroud)


Amo*_*mos 5

设置可见性GONE / VISIBLE之前只需执行一行代码即可:

TransitionManager.beginDelayedTransition([the rootView containing the cardView], new AutoTransition()); 
Run Code Online (Sandbox Code Playgroud)

无需在XML中使用animateLayoutChanges = true(这种方式也很简单,但是折叠行为很糟糕)