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 paraTextView
de una viñeta y la otra para el texto - para hacer que el texto
TextView
complete el resto deTableRow
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>