recycler implementar como cardview card android android-cardview

recycler - como implementar cardview en android



Expandir y contraer CardView (5)

¿Cuál es la forma correcta de expandir un CardView?


Utilice una vista de lista expandible con cardview

o incluso

Puede usar el contenido de ajuste como altura de vista de tarjeta y usar vista de texto dentro de él debajo del título, así que al hacer clic en hacer visible la vista de texto y viceversa .

¿Pero no es mal diseño?

pues no lo es si das alguna transición o animación cuando se expande o colapsa

Si desea ver alguna transición predeterminada, simplemente escriba android: animateLayoutChanges = "true" en el diseño principal .


Obtuve la solución (vista de lista ampliable de vista de tarjeta) ver este enlace http://www.devexchanges.info/2016/08/expandingcollapsing-recyclerview-row_18.html

Si agregas el ícono de flecha hacia abajo, solo usas mi código

crear 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); } } });


Si está utilizando CardViews dentro de un ListView o RecyclerView vea mi respuesta para la forma recomendada de hacerlo: RecyclerView expandir / contraer elementos

Si solo está utilizando CardView, haga esto en su on onClickListener de cardview:

TransitionManager.beginDelayedTransition(cardview); detailsView.setVisibility(View.VISIBLE);

De manera predeterminada, mantenga la visibilidad de sus detalles para que se les SALTE en su xml.


Usé una vista de tarjeta y una sección expandir item_description en la vista de tarjeta. Para la parte de expansión, creé un TextView debajo de la sección del encabezado ( LinearLayout / item_description_layout ) y cuando el usuario hace clic en el diseño del encabezado, se llama a un método de expandir / contraer. Aquí está el código en el 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"/>

Aquí está el método que se llama. También agregué un ObjectAnimator para manejar la animación expandir / contraer del bloque. Esta es una animación simple que usa la longitud del texto de descripción.

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(); }


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; } };