studio recyclerview libreria imágenes implement example dependencia con cardview card android android-layout android-5.0-lollipop android-recyclerview android-cardview

recyclerview - dependencia cardview android studio



CardView layout_width="match_parent" no coincide con el ancho padre RecyclerView (10)

Tengo un fragmento con contiene un RecyclerView con layout_width = "match_parent":

<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity$PlaceholderFragment" />

El elemento en el RecyclerView es un CardView también con layout_width = "match_parent":

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" android:layout_gravity="center" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="20dp" card_view:cardCornerRadius="4dp"> <TextView android:layout_gravity="center" android:id="@+id/info_text" android:layout_width="match_parent" android:gravity="center" android:layout_height="match_parent" android:textAppearance="?android:textAppearanceLarge"/> </android.support.v7.widget.CardView>

Inflando la vista del artículo de la siguiente manera:

public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { CardView v = (CardView) LayoutInflater.from(parent.getContext()) .inflate(R.layout.card_listitem, null, true); ViewHolder vh = new ViewHolder(v); return vh; }

Pero cuando ejecuto la aplicación, CardView se muestra como wrap_content como se muestra a continuación:

Tenga en cuenta que esto se ejecutó en emulador, no en un dispositivo real.

¿Estoy haciendo algo mal, o es un error?


Esto funcionó para mí,

View viewHolder= LayoutInflater.from(parent.getContext()) .inflate(R.layout.item, null, false); viewHolder.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT)); return new ViewOffersHolder(viewHolder);


Esto funciona para mí

View view = inflator.inflate(R.layout.layout_item, ***null***, false);


Esto parece estar arreglado en ''com.android.support:recyclerview-v7:23.2.1''

Ver: RecyclerView wrap_content para más discusiones.


La forma en que lo hice es:

View view = mInflater.inflate(R.layout.row_cardview, null, true); WindowManager windowManager = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE); int width = windowManager.getDefaultDisplay().getWidth(); view.setLayoutParams(new RecyclerView.LayoutParams(width, RecyclerView.LayoutParams.MATCH_PARENT));

Explicación: en su onCreateViewHolde una vez que obtenga la vista de tarjeta, obtenga el ancho de la pantalla y luego configure el parámetro de diseño correspondiente para la vista de tarjeta.


La implementación predeterminada fuerza el uso de wrap_content en el administrador de diseño predeterminado:

@Override public LayoutParams generateDefaultLayoutParams() { return new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); }

Todo lo que tiene que hacer es anular este método en su LayoutManager como este:

@Override public LayoutParams generateDefaultLayoutParams() { return new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); }


Los documentos para inflate :

Inflar una nueva jerarquía de vista desde el recurso xml especificado. Lanza InflateException si hay un error.

Parámetros
ID de recurso para un recurso de diseño XML para cargar (p. ej., R.layout.main_page) root
view para ser el padre de la jerarquía generada (si attachToRoot es verdadero), o simplemente un objeto que proporciona un conjunto de valores de LayoutParams para la raíz de la jerarquía devuelta (si attachToRoot es falso)
attachToRoot ¿ Si la jerarquía inflada se debe unir al parámetro raíz? Si es falso, root solo se usa para crear la subclase correcta de LayoutParams para la vista raíz en el XML. Devuelve la vista raíz de la jerarquía inflada. Si se proporcionó root y attachToRoot es verdadero, esto es root; de lo contrario, es la raíz del archivo XML inflado.

Aquí es importante no proporcionar el verdadero, pero el padre:

LayoutInflater.from(parent.getContext()) .inflate(R.layout.card_listitem, parent, false);

El suministro de la vista parent permite al inflador saber qué layoutpaces usar. El suministro del parámetro false le dice que aún no lo adjunte al padre. Eso es lo que RecyclerView hará por usted.


Simplemente configure nuevos parámetros de diseño

view.setLayoutParams(new RecyclerView.LayoutParams( RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT ));


Use RelativeLayout como el padre inmediato de CardView.

<RelativeLayout android:layout_width="match_parent" ... > <CardView android:layout_width="match_parent" ... > </CardView> </RelativeLayout>


Use card_view: contentPadding con un valor negativo

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" card_view:contentPadding="-4dp" card_view:cardElevation="0dp" android:layout_height="wrap_content">

Funcionó para mí


CardView en un diseño que tenga ancho: match_parent