Android GridView carga los elementos verticalmente
¿Es posible cargar elementos en GridView con orientación vertical? Quiero decir…
Situación normal – 3 columnas
- Cambiar dinámicamente el número de columnas de un GridLayoutManager
- Número de filas de una vista de cuadrícula en android
- Android Hexagon Grid
- Visualización de imágenes de la tarjeta sd en gridview android
- Android GridView reordena elementos mediante Arrastrar y soltar
----------------------------- 1 | 2 | 3 ----------------------------- 4 | 5 | 6
Situación deseada – 3 columnas
----------------------------- 1 | 3 | 5 ----------------------------- 2 | 4 | 6
¡Gracias por adelantado!
- Android establece el GridView para tener 2 columnas por fila solamente
- Vista de cuadrícula de Android Cambiar el número de columnas dependiendo de los datos
- Android obtener la posición del elemento seleccionado en gridview
- Cómo obtener la posición de desplazamiento de GridView?
- Problema con la última fila de GridView en Android
- OnItemClickListener no funciona, pero OnItemLongClickListener está trabajando en GridView
- Cómo habilitar arrastrar y soltar en el elemento de GridView onClick ()
- ¿Es posible crear un GridVIew de LinearLayouts?
No creo que esto sea posible en absoluto.
Motivo :
- Hay un fallo técnico haciendo esto ya que queremos desplazar los elementos verticalmente. Y también los elementos de representación en la pantalla es también la dirección vertical. En este caso no podemos completar el cálculo que debemos hacer en el método onLayout y onMeasure del GridView.
- Si intenta otra forma, es decir, algunos de nosotros ha sugerido que snuffle la fuente de datos como [1,5,2,6,3,7,4,8, …] pero en este caso lo que sería el algoritmo de barajar?
- Cuando el usuario lanza verticalmente, ¿cómo puede calcular cuántos elementos necesitamos hacer verticalmente y cuándo cambiar a la siguiente columna para procesar los demás elementos. No hay una fórmula matemática para ello.
Hice un poco de trabajo en esto y llegué a esta conclusion.Hope hacer esta pregunta sin respuesta contestada.
Por favor aclare, diga que tiene una cuadrícula como esta
1 4 7 2 5 8 3 6 9
Ahora si se desplaza hacia abajo verticalmente, que básicamente debe ser así?
2 5 8 3 6 9 4 7 10
En este caso,
- Los artículos 4 y 7 no se reciclan, de hecho se trasladan a una nueva posición
- El ítem 1 debe ser reciclado
- Solo se introduce el ítem 10
Claramente, esto no es como funciona un ListView / GridView normal donde se recicla una fila a la vez, AFAIK necesitará personalizar GridView para obtener esta funcionalidad.
¿Es posible cambiar la secuencia de datos? En su ejemplo, cambie los datos a [1,3,5,2,4,6, …] para orientación horizontal, [1,5,2,6,3,7,4,8, …] para Orientación vertical.
// ¿Ha utilizado alguna vez GridLayout esto , Pruebe este:
File -> Import -> <sdk_folder>\extras\android\support\v7\gridlayout>
// Añade este proyecto como proyecto de biblioteca
// archivo xml – activity_main.xml
<android.support.v7.widget.GridLayout 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:id="@+id/gridLayout" tools:context="com.example.gridlayoutdemo.MainActivity" > </android.support.v7.widget.GridLayout>
// código Java
MainActivity.class
import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.GridLayout; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { private GridLayout gridLayout; private TextView[] textViews; private int noOfItems; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gridLayout = (GridLayout) findViewById(R.id.gridLayout); gridLayout.setOrientation(1); gridLayout.setColumnCount(3); gridLayout.setRowCount(3); textViews = new TextView[8]; for (int i = 0; i < 8; i++) { textViews[i] = new TextView(MainActivity.this); textViews[i].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); textViews[i].setText(String.valueOf(i)); textViews[i].setTextSize(25); textViews[i].setPadding(50, 25, 10, 25); gridLayout.addView(textViews[i]); } setContentView(gridLayout); for (noOfItems = 0; noOfItems < 8; noOfItems++) { textViews[noOfItems].setOnClickListener(new View.OnClickListener() { int pos = noOfItems; public void onClick(View v) { Toast.makeText(getBaseContext(), pos + " Clicked", Toast.LENGTH_SHORT).show(); } }); } } }
// Si desea mostrar horizontalmente que hacer gridLayout.setOrientation (0);
Creo que necesitas https://github.com/ApmeM/android-flowlayout . Y poner la gravedad del niño a Gravity.FILL_HORIZONTAL
Incluso tienen orientación vertical
u horizontal
Si está utilizando GridLayoutManager con RecyclerView, la manera fácil de llenar verticalmente los datos primero es:
GridLayoutManager lLayout_artist = new GridLayoutManager(getActivity(),3,GridLayoutManager.HORIZONTAL, false);
Usted puede cambiar la orientación de GridLayoutManager según su requisito.
Puede lograr esto utilizando GridLayout en lugar de GridView.
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical" android:rowCount="2"> </GridLayout>
- Cómo integrar Facebook Connect con Android
- ¿Cuál es la diferencia entre los contactos y los contactos crudos?