studio plain example español edittext android user-interface textview

plain - textview layout android



Sangría la lista de viñetas en TextView (4)

Tengo un TextView que llené con texto de un recurso de cadena 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 sangría de líneas en la lista de viñetas que abarcan más de una línea. De manera predeterminada, el texto no está sangrado más allá de la viñeta, por lo que se ve feo. ¿Es posible hacer esto con parámetros de estilo o para crear viñetas de alguna otra manera?

Gracias por adelantado.

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

  • texto que va más allá del ancho
    de la linea

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


Gracias @Bjorn
También puedes 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 resolví este problema fue mediante el uso de 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>


Me sorprende que parezca que nadie tiene este problema. Es decir, la lista de viñetas no puede ser tan infrecuente en los cuadros de diálogo Acerca de, preguntas frecuentes, etc., y una viñeta no tiene que contener demasiado texto para abarcar más de una fila y encontrarse con 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 texto estático en una lista de viñetas, así que no me molesto en crear la viñeta + texto dinámicamente en el código. Si alguien tiene alguna sugerencia de cómo lograr lo mismo de una mejor manera, por favor ilumíname.

Por cierto, si va con la solución sugerida en el segundo enlace de arriba:

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

La segunda fila, la tercera, etc. en una viñeta que abarque más de una fila no tendrá la misma sangría que la primera línea, lo cual es bastante feo.


Solo trato 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 que el texto TextView complete el resto de TableRow vacío y sangrado en una nueva línea, establezca el peso en 1. Puede establecer el peso de la viñeta en cero o simplemente no establecer el peso de la viñeta y dejar que se vacíe
  • según mi experiencia, cambiar el parámetro de ancho no afecta el texto y la viñeta. Entonces puede dejarlo vacío o configurarlo para cualquier cosa que desee.

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>