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


Indent bullet list en TextView

Tengo un TextView que relleno con el texto de una cadena de recursos en strings.xml. El recurso de cadena contiene elementos <li> para crear una lista de viñetas dentro de TextView. Mi problema es que quiero controlar la indención de líneas en la lista de viñetas que abarcan más de una línea. Por defecto, el texto no está sangrado después de la viñeta, por lo que parece algo feo. ¿Es posible hacer esto con parámetros de estilo o crear balas de alguna otra manera?

Gracias por adelantado.

Edit: ¿Realmente se responde? No tengo ningún problema en producir la lista de viñetas, como se describe en esos enlaces, pero tengo problemas para obtener el diseño correcto. La sangría es así:

  • Texto que va más allá del ancho
    De la línea.

Y quiero que el "de la línea" al menos comience sangría hasta el texto después de la viñeta. Eso es lo que intento lograr.

  • Android Cómo deshacerse del signo de interrogación al final del elipsis
  • 4 Solutions collect form web for “Indent bullet list en TextView”

    Estoy sorprendido de que no parece haber nadie con este problema. Quiero decir, la lista de balas no puede ser tan poco común en los diálogos, etc FAQ, etc y una viñeta no tiene que contener demasiado texto para abarcar más de una fila y ejecutar en este problema.

    De todos modos, tengo que resolverlo así por ahora:

    <?xml version="1.0" encoding="utf-8"?> <ScrollView android:id="@+id/ScrollViewTipsLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/TipsLayout" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TableLayout android:layout_height="wrap_content" android:id="@+id/TableLayout01" android:layout_width="wrap_content" > <TableRow> <TextView android:id="@+id/tvIngress" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@+string/tv_picking_content_ingress" android:layout_span="2" android:singleLine="false" android:layout_weight="1" /> </TableRow> <TableRow> <TextView android:id="@+id/tvCleaningDot1" android:layout_height="wrap_content" android:text="•" android:singleLine="false" /> <TextView android:id="@+id/tvCleaningFirst" android:layout_height="wrap_content" android:text="@+string/tv_picking_content_first" android:layout_width="0dp" android:layout_weight="1" android:gravity="left" android:singleLine="false" /> </TableRow> <TextView android:id="@+id/tvCleaningDot2" android:layout_height="wrap_content" android:text="•" android:singleLine="false" /> <TextView android:id="@+id/tvCleaningSecond" android:layout_height="wrap_content" android:text="@+string/tv_picking_content_second" android:layout_width="0dp" android:layout_weight="1" android:gravity="left" android:singleLine="false" /> </TableRow> </TableLayout> </RelativeLayout> 

    Lo uso para presentar el texto estático en una lista de viñetas, así que no me molesté en crear el texto de la viñeta dinámicamente en el código. Si alguien tiene alguna sugerencia de cómo lograr la misma cosa de una mejor manera, por favor, iluminarme.

    Btw, si va con la solución sugerida en el segundo enlace anterior:

     android:text="<ol><li>item 1\n</li><li>item 2\n</li></ol> 

    La segunda, tercera fila, etc., en una bala que se extiende sobre más de una fila, no obtendrá la misma indención que la primera línea, lo cual es bastante feo.

    Gracias @Bjorn
    También puede hacer algo como bramido.

     <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableLeft="@drawable/point" android:textAppearance="?android:attr/textAppearanceSmall" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Your Text Here" android:textAppearance="?android:attr/textAppearanceSmall" android:textSize="14sp" /> </LinearLayout> 

    La forma en que resolvió este problema fue utilizando un RelativeLayout y marginLeft. El marginLeft pondrá un margen en blanco entre él y el elemento anterior.

     <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbarTrackVertical="@drawable/scrollbar_vertical_track" android:scrollbarThumbVertical="@drawable/scrollbar_vertical_thumb" android:scrollbarSize="12dip"> <RelativeLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10sp"> <TextView android:id="@+id/body_text3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:lineSpacingExtra="3sp" android:text="Main paragraph of text, before the bulleted list" android:textSize="15sp" /> <TextView android:id="@+id/type1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:lineSpacingExtra="3sp" android:text="• First bullet" android:textSize="15sp" android:layout_below="@+id/body_text3" android:layout_marginLeft="25dp" /> <TextView android:id="@+id/type2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:lineSpacingExtra="3sp" android:text="• Second bullet" android:textSize="15sp" android:layout_below="@+id/type1" android:layout_marginLeft="25dp" /> </RelativeLayout> </ScrollView> 

    Sólo tratando de señalar la respuesta clave de la pregunta:

    • Para crear una lista de viñetas, use TableLayout con dos columnas para cada fila. Una columna para TextView de una viñeta y la otra para el texto
    • Para hacer texto TextView llenar el resto vacío TableRow y sangría en la nueva línea, establecer el peso a 1. Puede establecer el peso de la bala a cero o simplemente no establecer el peso de la bala y dejarlo vacío
    • Basado en mi experiencia, cambiar el parámetro width no afecta al texto ya la viñeta. Así que puedes dejarlo vacío o ponerlo a cualquier cosa que quieras.

    Ejemplo:

     <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/bullet" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/bullet"/> <TextView android:id="@+id/TextView01" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="this is the text of a bullet list"/> </TableRow> </TableLayout> 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.