Cómo crear una tarjeta CardView horizontal con RecyclerView con una sola tarjeta en la pantalla a la vez

Soy nuevo en Android Development. Estoy intentando exhibir una lista de tarjetas en la pantalla con solamente una tarjeta a la vez en la pantalla usando RecyclerView . Pero desafortunadamente las tarjetas que diseñé no están llenando el ancho de pantalla entero según lo esperado, como usted puede ver en la imagen dada abajo. ¿Cómo puedo estirar estas tarjetas para llenar toda la pantalla (en cuanto a la anchura, la altura es el contenido de envoltura). ¿Hay alguna solución posible a este problema?

Mi código:

activity_sub.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include android:id="@+id/appBar" layout="@layout/app_bar"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Horizontal Card List" android:textSize="16sp" android:padding="3dp" android:background="#CCCCCC" /> <android.support.v7.widget.RecyclerView android:id="@+id/hrlist_recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="horizontal" /> </LinearLayout> 

custom_card.xml

  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="8dp" android:tag="contains Cards main Container"> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:elevation="10dp" app:cardBackgroundColor="#B6B6B6"> <TextView android:id="@+id/card_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:padding="20dp" android:text="Card 1" android:textSize="30sp" /> </android.support.v7.widget.CardView> </LinearLayout> 

SubActivity.java

 package ab9.mamv.com.playground; import android.os.Bundle; import android.support.v4.app.NavUtils; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import java.util.ArrayList; import java.util.List; public class SubActivity extends ActionBarActivity { Toolbar toolbar; private RecyclerView mRecyclerView; private SubActivityAdapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sub); toolbar = (Toolbar) findViewById(R.id.appBar); setSupportActionBar(toolbar); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); //RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.hrlist_recycler_view); mRecyclerView.setHasFixedSize(true); mAdapter = new SubActivityAdapter(this, getData()); mRecyclerView.setAdapter(mAdapter); //Layout manager for the Recycler View mLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false); mRecyclerView.setLayoutManager(mLayoutManager); } public static List<SubActivityData> getData() { List<SubActivityData> subActivityData = new ArrayList<>(); String[] cardTitle = { "Card 1", "Card 2", "Card 3", "Card 4", "Card 5", "Card 6", }; for (int i = 0; i < cardTitle.length; i++) { SubActivityData current = new SubActivityData(); current.cardTitle = cardTitle[i]; subActivityData.add(current); } return subActivityData; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_sub, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } if (id == android.R.id.home) { NavUtils.navigateUpFromSameTask(this); } return super.onOptionsItemSelected(item); } } 

SubActivityAdapter.java

 package ab9.mamv.com.playground; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.Collections; import java.util.List; /** * Created by Abhishek on 20-03-2015. */ public class SubActivityAdapter extends RecyclerView.Adapter<SubActivityAdapter.SubActivityViewHolder> { private final LayoutInflater inflater; List<SubActivityData> subActivityData = Collections.EMPTY_LIST; public SubActivityAdapter(Context context, List<SubActivityData> subActivityData) { inflater = LayoutInflater.from(context); this.subActivityData = subActivityData; } @Override public SubActivityViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.custom_card, parent, false); SubActivityViewHolder subActivityViewHolder = new SubActivityViewHolder(view); return subActivityViewHolder; } @Override public void onBindViewHolder(SubActivityViewHolder holder, int position) { SubActivityData currentCard = subActivityData.get(position); holder.title.setText(currentCard.cardTitle); } @Override public int getItemCount() { return subActivityData.size(); } class SubActivityViewHolder extends RecyclerView.ViewHolder { TextView title; public SubActivityViewHolder(View itemView) { super(itemView); title = (TextView) itemView.findViewById(R.id.card_text); } } } 

Introduzca aquí la descripción de la imagen

Simplemente cambie su onCreateViewHolder a:

 @Override public SubActivityViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.custom_card, parent, false); view.setMinimumWidth(parent.getMeasuredWidth()); SubActivityViewHolder subActivityViewHolder = new SubActivityViewHolder(view); return subActivityViewHolder; } 

Puede que tenga que trabajar en custom_card.xml después de esto. Pero debería hacer el truco.

Aunque esta pregunta y muchas otras preguntas similares se publicaron hace mucho tiempo atrás, no encontré una sola solución de trabajo para ello.

Aquí hay una solución simple para ello

 RecyclerView rv = (RecyclerView) findViewById(R.id.swipeView);; rv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); if (dx >= 0) { recyclerView.smoothScrollToPosition(layoutManager.findLastVisibleItemPosition()); } else { recyclerView.smoothScrollToPosition(layoutManager.findFirstVisibleItemPosition()); } } }); 

Puede agregar umbral dx para swaps más atractivos.

Siga el tutorial a continuación, pero cambie su ancho y altura de CardView a "match_parent" y sólo obtendrá una tarjeta en la pantalla a la vez

https://knowledgecollisions.wordpress.com/2016/03/29/using-recyclerview-and-cardview-in-your-android-app/

  • ¿Qué es el ciclo de vida del adaptador RecyclerView?
  • Getter no está asociado a ningún campo - Realm
  • SwipeRefreshLayout sin animación en la creación de fragmentos
  • Vista previa de recyclerview horizontal en android studio
  • Android: Desplazamiento de problemas con recyclerview dentro de un viewpager
  • Cómo puedo crear un diseño nestedScroll como este?
  • Botón de acción flotante en una actividad - ¿cómo anclar a una vista de reciclaje en un fragmento?
  • Clic en el elemento programáticamente en RecyclerView
  • Cuando getItemCount y método getItemViewType se llaman en Recycler Adapter
  • Recyclerview (Obtener elemento en Recyclerview)
  • No se puede colocar la vista debajo de RecyclerView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.