CardView layout_width = "match_parent" no coincide con el ancho de RecyclerView padre

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> 

Hincho la vista del artículo como abajo:

 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, el CardView se representa como wrap_content como se muestra a continuación:

Tarjeta de crédito

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

¿Estoy haciendo algo mal, o es un error?

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 (por ejemplo, R.layout.main_page) root
(Si attachToRoot es true), o simplemente un objeto que proporciona un conjunto de valores de LayoutParams para la raíz de la jerarquía devuelta (si attachToRoot es false.)
AttachToRoot Si la jerarquía inflada se debe asociar al parámetro raíz? Si es falso, root sólo se utiliza 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 root fue suministrado y attachToRoot es true, esto es root; De lo contrario, es la raíz del archivo XML inflado.

Es importante aquí no suministrar la verdad, pero suministrar a los padres:

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

El suministro de la vista parent permite al inflador saber qué layoutparams usar. Al suministrar el parámetro false se le dice que no lo adjunte todavía al padre. Eso es lo que el RecyclerView hará por usted.

Disposición relativa del usuario como la vista inmediata de padre a tarjeta.

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 la tarjeta, obtenga el ancho de la pantalla y, a continuación, establezca el parámetro de diseño según la vista de la tarjeta.

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 parece fijarse en 'com.android.support:recyclerview-v7:23.2.1'

Vea: RecyclerView wrap_content para más discusiones.

Esto funciona para mí

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

Simplemente configure nuevos parámetros de diseño

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

Usar 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í

Implementación predeterminada force wrap_content en el gestor de diseño predeterminado utilizado por RecycelerView como se ve en el código fuente

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

Haga todo lo que tiene que hacer es anular este método en su LayoutManager y volver como:

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

Envuelva CardView en un diseño que tenga anchura: match_parent

  • Cómo agregar un scroller rápido al RecyclerView
  • "LayoutManager ya está conectado a un RecyclerView" error
  • Recyclerview con fondo de desplazamiento
  • RecyclerView - ¿Cómo suavizar desplazamiento a la parte superior del elemento en una posición determinada?
  • Alternativa a registerDataSetObserver () en RecyclerView
  • Obtener el elemento seleccionado y su posición en RecyclerView
  • Deshabilitar ItemTouchHelper para una parte de un visor
  • RecyclerView: ¿Cómo simular el selector de dibujo de ListView en la parte superior?
  • Android - Implementación del filtro de búsqueda en un RecyclerView
  • Agregue RecyclerView (RecyclerFragment) a un cuadro de diálogo
  • SetLayoutManager NullPointException en RecyclerView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.