Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


GridLayoutManager – el ancho de la columna envuelve a su propio hijo mayor

Tengo un RecyclerView dentro de un HorizontalScrollView y quiero que use un GridLayoutManager . Esto es aceptable pero una cosa todavía me molesta, el ancho de cada columnas es igual (basado en el ancho más grande de la célula supongo?). ¿No es posible ajustar el ancho de las columnas para que coincida con la celda más grande de esta columna específica?

Debe buscar algo como esto:

Introduzca aquí la descripción de la imagen

Donde la parte naranja es la parte tomada por la vista de la celda.


EDITAR

Nos pedimos que aclarara lo que esperaba. Un ejemplo es mejor que palabras, aquí puedes ver una captura de pantalla de un RecyclerView con GridLayoutManager. Cada elemento es un TextView simple que contiene aleatoriamente un texto entre 10 y 40 caracteres. El RecyclerView está dentro de un HorizontalScrollView como se dijo antes. Podemos ver que todas las columnas tienen el mismo ancho, a pesar de que ningún elemento de esta columna puede cumplir con el ancho completo. Lo que me gustaría es quitar esos espacios vacíos inútiles y tener columnas con diferentes tamaños con cada columna que coincida con el ancho de su propio hijo más grande.

Introduzca aquí la descripción de la imagen

Si desea probar este comportamiento, puede clonar este repo que subí en Github: https://github.com/ShargotthDev/TestGrid

Como se le preguntó, aquí está mi diseño XML (muy básico):

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <HorizontalScrollView android:id="@+id/gameplay_hotizontalScroll_ScrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="70dp"> <android.support.v7.widget.RecyclerView android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/recycler_view" /> </HorizontalScrollView> </RelativeLayout> 

EDIT 2

Debería haber mencionado que algunas de las celdas pueden tener un tamaño de extensión> 1 y el LayoutManager debe ser vertical para que esas celdas tomen más lugares horizontalmente y no verticalmente (no sé si me estoy haciendo comprensible).

Gracias por tu tiempo !

One Solution collect form web for “GridLayoutManager – el ancho de la columna envuelve a su propio hijo mayor”

No es necesario que coloque su RecyclerView en HorizontalScrollView. Vea el código abajo.

 public class MainActivity extends AppCompatActivity { String[] list = new String[]{"Some text goes here", "Some small", "text", "goes here", "Some", "very large text", "goes here", "Some text goes here", "Some small", "text", "goes here", "Some", "very large text", "goes here"}; RecyclerView grid; GridAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); grid = (RecyclerView)findViewById(R.id.grid); grid.setLayoutManager(new GridLayoutManager(this, 2, LinearLayoutManager.HORIZONTAL, false)); grid.setHasFixedSize(true); adapter = new GridAdapter(list); grid.setAdapter(adapter); } } 

Clase del adaptador

 public class GridAdapter extends RecyclerView.Adapter<GridAdapter.ViewHolder>{ String[] mList; public GridAdapter(String[] list) { mList = list; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.bind(mList[position]); } @Override public int getItemCount() { return mList.length; } public class ViewHolder extends RecyclerView.ViewHolder { TextView textView; public ViewHolder(View itemView) { super(itemView); textView = (TextView)itemView.findViewById(R.id.text); } public void bind(String s) { textView.setText(s); } } } 

Row.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="match_parent" android:padding="10dp"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 

Activity_main.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="cab.suresh.gridlayoutexample.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/grid" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout> 

Editar Coloque su RecyclerView dentro de NestedScrollView como este

 <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="none"> <android.support.v7.widget.RecyclerView android:id="@+id/grid" android:layout_width="match_parent" android:layout_height="wrap_content"/> </android.support.v4.widget.NestedScrollView> 

Y establecer su número de spanCount como este

SpanCount = 8;

 grid.setLayoutManager(new GridLayoutManager(this, spanCount, LinearLayoutManager.HORIZONTAL, false)); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.