RecyclerView con elementos de contenido de ajuste

Necesito implementar el siguiente elemento de IU:

Introduzca aquí la descripción de la imagen

  • Lista de cadenas de tamaño desconocido (que provenía de una llamada de servidor)
  • Cualquier elemento debe ser contenido de ajuste.
  • Si un elemento no se ajusta a la fila, estará en la fila siguiente.
  • Toda la lista / cuadrícula está centrada

Pensé en usar RecyclerView con StaggeredGridLayoutManager

Pero no sé si es el camino correcto, alguna idea?

    No estoy seguro de que el método sería útil para usted, pero en lugar de

    Usando RecyclerView con StaggeredGridLayoutManager

    Puede utilizar FlowLayout terceros:

    1. Primera implementación (diseño de flujo de Android)

      Introduzca aquí la descripción de la imagen Introduzca aquí la descripción de la imagen

    2. Segunda implementación (disposición de flujo)

      Introduzca aquí la descripción de la imagen

    Compruebe esta esencia para el ejemplo completo:

    https://github.com/davidbeloo/Hashtags

    Introduzca aquí la descripción de la imagen

    El hecho de que tenga un número variable de celdas en cada fila significa que tendría que trabajar bastante duro para obtener cualquier valor de un enfoque de reciclaje. Porque para saber qué datos va en la fila 17 usted tiene que (pre) medir todos los datos en filas 0 – 16.

    Dependiendo de su caso de uso. Si la lista está limitada en un número razonable de elementos. El uso de un único TextView , con un uso inteligente de los vanos puede ser una mejor solución. Simplemente recoja todos sus hashtags en una sola cadena, y use RoundedBackgroundSpan (ver enlace) para agregar los fondos de color. Luego envolver todo el asunto en un ScrollView .

    EDIT 1: Añadido código de solución posible.

     public class RoundedBackgroundSpan extends ReplacementSpan { int mBackgroundColor; int mTextColor; float mRoundedCornerRadius; float mSidePadding = 10; // play around with these as needed float mVerticalPadding = 30; // play around with these as needed public RoundedBackgroundSpan(final int backgroundColor, final int textColor, final float roundedCornerRadius) { mBackgroundColor = backgroundColor; mTextColor = textColor; mRoundedCornerRadius = roundedCornerRadius; } @Override public int getSize(final Paint paint, final CharSequence text, final int start, final int end, final Paint.FontMetricsInt fm) { return Math.round(MeasureText(paint, text, start, end) + (2 * mSidePadding)); } @Override public void draw(final Canvas canvas, final CharSequence text, final int start, final int end, final float x, final int top, final int y, final int bottom, final Paint paint) { // draw the rounded rectangle background RectF rect = new RectF(x, -mVerticalPadding + ((bottom + top) / 2) + paint.getFontMetrics().top, x + MeasureText(paint, text, start, end) + (2 * mSidePadding), mVerticalPadding + ((bottom + top) / 2) + paint.getFontMetrics().bottom); paint.setColor(mBackgroundColor); canvas.drawRoundRect(rect, mRoundedCornerRadius, mRoundedCornerRadius, paint); // draw the actual text paint.setColor(mTextColor); canvas.drawText(text, start, end, x + mSidePadding, ((bottom + top) / 2), paint); } private float MeasureText(Paint paint, CharSequence text, int start, int end) { return paint.measureText(text, start, end); } } 

    Y en otro lugar (actividad / fragmento más probable)

      SpannableStringBuilder stringBuilder = new SpannableStringBuilder(); for (String hashTag : hashTags) { stringBuilder.append(hashTag); stringBuilder.setSpan(new RoundedBackgroundSpan(getRandomColor(), getResources().getColor(android.R.color.darker_gray), 10), stringBuilder.length() - hashTag.length(), stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); stringBuilder.append(" "); } textView.setText(stringBuilder); 

    Y en algún lugar de tu xml (note android: lineSpacingMultiplier = "3" y android: gravity = "center")

     <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:lineSpacingMultiplier="3" android:gravity="center" android:padding="10dp" android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content"/> </ScrollView> 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.