答案 0 :(得分:24)
使用带有cardview的可扩展列表视图
甚至
您可以将包装内容用作 cardview 的高度并使用 在标题下方的 textview ,依此类推使文字视图可见 和反之亦然。
但设计不是很糟糕吗?
如果你在扩展时提供一些过渡或动画,那就不是了 或者崩溃了如果你想看到一些默认转换,那么只需在父布局中写下 android:animateLayoutChanges =“true”。
答案 1 :(得分:17)
如果您在ListView或RecyclerView中使用CardViews,请参阅我的答案,了解建议的方法: RecyclerView expand/collapse items
如果您只是使用CardView,请在您的onviewListener上执行此操作:
library(xml2)
library(rvest)
library(curl)
web_content <- read_html(curl('http://benchmarkrealestate.com/', handle = new_handle("useragent" = "Mozilla/5.0")))
默认情况下,将您的detailsView的可见性保持为xml中的GONE。
答案 2 :(得分:14)
我在cardview中使用了cardview和扩展部分 item_description 。对于展开部分,我在标题部分( 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"/>
以下是调用的方法。我还添加了一个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();
}
答案 3 :(得分:2)
在设置可见性GONE / VISIBLE之前只需执行一行代码即可
TransitionManager.beginDelayedTransition([the rootView containing the cardView], new AutoTransition());
无需在XML中使用animateLayoutChanges = true(这种方式也很简单,但是折叠行为很糟糕)
答案 4 :(得分:0)
我最初是通过在CardView的底部添加一个额外的View并将其可见性设置为“消失(gone vs invisible)”来尝试这样做的:
tools:visibility="gone"
然后,我将CardView的高度设置为Wrap Content,并添加一个带有onClickListener的图标,该图标将多余的View的可见性更改为 visible 。
与此相关的问题是,即使将可见性设置为 ,我的CardView仍会表现出多余的View。
要解决这个问题,我在onBindViewHolder方法中明确设置了额外View的可见性:
holder.defPieces.visibility = View.GONE
此后,可扩展功能按我希望的方式工作。我不知道在放大显示在RecyclerView中的视图时是否会发生一些奇怪的操作。
答案 5 :(得分:-3)
mView.Click +=(sender, e) =>{
LinearLayout temp = mView.FindViewById<LinearLayout>(Resource.Id.LinerCart);
if (vs == false) {
temp.Visibility = ViewStates.Gone;
vs = true;
} else {
temp.Visibility = ViewStates.Visible;
vs = false;
}
};
答案 6 :(得分:-3)
我得到了解决方案(单一cardview可扩展列表视图) 检查此链接 http://www.devexchanges.info/2016/08/expandingcollapsing-recyclerview-row_18.html
如果您添加向下箭头图标 你只需使用我的代码
创建xml
<RelativeLayout
android:id="@+id/layout_expand"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingLeft="10dp"
android:orientation="vertical">
<TextView
android:id="@+id/item_description_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/white"
android:clickable="true"
android:onClick="toggle_contents"
android:padding="10dp"
android:text="Guest Conditions"
android:textColor="@color/hint_txt_color"
android:fontFamily="sans-serif-medium"
android:textStyle="normal"
android:paddingBottom="15dp"
android:textSize="16dp"/>
<ImageView
android:layout_alignParentRight="true"
android:paddingTop="4dp"
android:paddingRight="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_keyboard_arrow_down"/>
<!--content to hide/show -->
<TextView
android:id="@+id/item_description"
android:layout_below="@+id/item_description_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:padding="10dp"
android:text="@string/about_txt2"
android:textColor="@color/hint_txt_color"
android:fontFamily="sans-serif-medium"
android:textStyle="normal"
android:paddingBottom="15dp"
android:visibility="gone"
android:textSize="12dp" />
</RelativeLayout>
</android.support.v7.widget.CardView>
///////////////////////////////////////////////
Mainactivity.java
RelativeLayout layout_expand = (RelativeLayoutfindViewById(R.id.layout_expand);
item_description = (TextView) findViewById(R.id.item_description);
TextView item_description_title;
item_description_title = (TextView) findViewById(R.id.item_description_title);
item_description.setVisibility(View.GONE);
///////////////////////////////////////////////////////////////////
animationUp = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_up);
animationDown = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_down);
layout_expand.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(item_description.isShown()){
item_description.setVisibility(View.GONE);
item_description.startAnimation(animationUp);
}
else{
item_description.setVisibility(View.VISIBLE);
item_description.startAnimation(animationDown);
}
}
});
item_description_title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(item_description.isShown()){
item_description.setVisibility(View.GONE);
item_description.startAnimation(animationUp);
}
else{
item_description.setVisibility(View.VISIBLE);
item_description.startAnimation(animationDown);
}
}
});