Si miras la charla que di en el día de la Universidad Devoxx (disponible en parleys.com ), aprenderás a hacerlo tú mismo. Durante la charla, escribí una FlowLayoutimplementación en vivo en el escenario para mostrar lo simple que es escribir diseños personalizados.
gracias chico romain, eso realmente ayuda. ¿Qué tal simplemente dar la solución? o enlace? ... No entiendo cómo se aceptó su respuesta.
Johann Hilbold
4
@JohannHilbold: Acabo de agregar los enlaces
Macarse
7
Los lectores deben saber que el código del enlace tiene algunos problemas graves y está lejos de ser una solución inmediata. Ya he tenido dos problemas importantes en esta pequeña base de código. No publicaré las correcciones porque son soluciones de cinta adhesiva para mis necesidades particulares ...
Nemanja Kovacevic
6
Nunca dije que fuera perfecto :)
Romain Guy
19
@RomainGuy el punto es que, después de todo, tal vez no sea tan simple.
<com.google.android.flexbox.FlexboxLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"app:flexWrap="wrap"><!-- contents go here --></com.google.android.flexbox.FlexboxLayout>
¡Esto debe marcarse como la solución! La mejor respuesta para este problema hasta ahora
x10sion
1
Para agregar a esta respuesta, esa biblioteca también tiene un LayoutManager si desea tener este efecto en un RecyclerView
Ari
1
Bingo, bango, bongo. Maravillosa biblioteca para usar Flexbox en Android. Buena esa.
Joshua Pinter
23
No tengo suficiente reputación para publicar un comentario sobre la respuesta de Romain Guy, pero ahí es donde debería estar esta respuesta (creé una cuenta solo para compartir mi edición).
De todos modos, veo que otras personas han descubierto que su genial solución FlowLayout tiene algunos problemas. Yo mismo pude encontrar uno y vi, como otros, que algunos niños estaban cortados. Mirando en detalle el algoritmo, parece ser un error muy simple en el cálculo de la altura. Cuando el último niño es el que se coloca en una nueva línea, entonces la altura no se calculó correctamente. Limpié un poco el cálculo (había un uso extraño de "altura" frente a altura actual).
El siguiente cambio soluciona el problema de "el último hijo se recorta si está en una nueva línea":
¡Me estaba rascando la cabeza desde las últimas 2 horas y solo este código me funcionó! ¿Puede proporcionar un diseño de flujo para RadioGroup?
Pratik Saluja
Además, quiero saber cómo puedo usar el margen. margin = 10dp proviene correctamente del diseño.
Pratik Saluja
1
@Pratik, si tiene un RadioGroup pequeño y desea que se muestren otras vistas junto a él si hay espacio y fluya a la siguiente línea si no hay espacio, el FlowLayout debería funcionar bien. Un RadioGroup horizontal grande que hace que sus elementos RadioButton fluyan a la siguiente línea cuando la primera línea está fuera de espacio requeriría que se escriba una clase de tipo RadioGroup personalizada, ya que RadioGroup extiende LinearLayout. Puede escribir una clase RadioGroup personalizada utilizando las ideas de esta clase FlowLayout. Hasta ahora no he tenido la necesidad de usar botones de radio. Normalmente usamos Spinners u otros controles.
jk7
@Pratik, se puede establecer con todos los márgenes android:layout_margin="10dp"en el archivo de diseño, o establecer márgenes individuales con atributos tales como android:layout_marginLeft="10dp", android:layout_marginTop="4dp", .etc.
jk7
0
Bonito y sencillo código FlowLayout autónomo aquí (solo algunos archivos gist.github concisos) :
Ahora hay soporte integrado en ConstraintLayout usando un widget de flujo. Tiene muchas opciones que se pueden utilizar para lograr muchos tipos de flujos.
Respuestas:
Si miras la charla que di en el día de la Universidad Devoxx (disponible en parleys.com ), aprenderás a hacerlo tú mismo. Durante la charla, escribí una
FlowLayout
implementación en vivo en el escenario para mostrar lo simple que es escribir diseños personalizados.La implementación se aloja aquí .
fuente
Deberías usar
FlexboxLayout
conflexWrap="wrap"
atributo.Para obtener instrucciones de compilación, consulte el repositorio de github.
Más sobre esto: https://android-developers.googleblog.com/2017/02/build-flexible-layouts-with.html
fuente
No tengo suficiente reputación para publicar un comentario sobre la respuesta de Romain Guy, pero ahí es donde debería estar esta respuesta (creé una cuenta solo para compartir mi edición).
De todos modos, veo que otras personas han descubierto que su genial solución FlowLayout tiene algunos problemas. Yo mismo pude encontrar uno y vi, como otros, que algunos niños estaban cortados. Mirando en detalle el algoritmo, parece ser un error muy simple en el cálculo de la altura. Cuando el último niño es el que se coloca en una nueva línea, entonces la altura no se calculó correctamente. Limpié un poco el cálculo (había un uso extraño de "altura" frente a altura actual).
El siguiente cambio soluciona el problema de "el último hijo se recorta si está en una nueva línea":
fuente
Hay una biblioteca de Google, llamada "flexbox-layout" . Usted deberia comprobar esto.
Para usarlo en RecyclerView, puede usar algo como eso:
fuente
Como una de las respuestas anteriores, comencé con la solución aquí: http://hzqtc.github.io/2013/12/android-custom-layout-flowlayout.html
Lo extendí para tener en cuenta las diferentes alturas de los niños como se muestra a continuación.
Usé esto como una solución para envolver TextEdits de varias líneas. ¡Espero eso ayude!
fuente
Aquí está la clase personalizada donde puede lograr un diseño como el siguiente agregando una vista dinámica (también llamada FlowLayout).
Ejemplo:
text_view.xml
activity_flow_layou_demo.xml
FlowLayouDemo.java
fuente
Una revisión de @MattNotEquals () FlowLayout que admite MarginLayoutParams.
Esta es solo una implementación minimalista de MarginLayoutParms para admitir los márgenes izquierdo, derecho, superior e inferior.
fuente
android:layout_margin="10dp"
en el archivo de diseño, o establecer márgenes individuales con atributos tales comoandroid:layout_marginLeft="10dp"
,android:layout_marginTop="4dp"
, .etc.Bonito y sencillo código FlowLayout autónomo aquí (solo algunos archivos gist.github concisos) :
http://hzqtc.github.io/2013/12/android-custom-layout-flowlayout.html
Sin embargo, la actividad lista para usar no me funcionó para cargar el diseño personalizado.
Encontré esta solución alternativa [usando la llamada 2-param .inflate () de este ejemplo ] :
fuente
Ahora hay soporte integrado en ConstraintLayout usando un widget de flujo. Tiene muchas opciones que se pueden utilizar para lograr muchos tipos de flujos.
Ejemplo:
Eche un vistazo a esta publicación: https://medium.com/@tapanrgohil/constraintlayout-flow-bye-bye-to-linerlayout-78fd7fa9b679
Y aquí: https://www.bignerdranch.com/blog/constraintlayout-flow-simple-grid-building-without-nested-layouts/
fuente