2010-09-15 44 views
24

Tengo un TextView que llené con texto de un recurso de cadena en strings.xml. El recurso de cadena contiene < li> elementos 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?Sangría lista de viñetas en TextView

Gracias de antemano.

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. El sangrado es la siguiente:

  • texto que vaya más allá del ancho
    de la línea.

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

+0

Esta pregunta ya se ha hecho. Posible duplicado de http://stackoverflow.com/questions/3429546/android-how-to-add-bullet-symbol-in-textview http://stackoverflow.com/questions/2196499/ordered-lists-inside-an- android-textview – DeRagan

+1

@DeRagan, no creo que sea un duplicado. La pregunta que mencionaste pregunta sobre tener un símbolo de viñeta, en lugar de una viñeta. –

Respuesta

20

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 como esto 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 por lo que no se molestan en crear la bala + 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, tercera fila, etc., en una bala que abarque más de una fila no conseguirá misma sangría como la primera línea de , que es bastante feo

+0

Gracias, y también si desea agregar una imagen personalizada para bullete podemos hacer esto – Dharmik

0

La forma en que resolvió 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> 
+0

¿Cómo es eso diferente de [respuesta de Björn] (http://stackoverflow.com/a/3871309/94363)? – rds

+1

Sugerí usar 'android: lineSpacingExtra = "3sp"' de la vista de texto, en lugar de usar . No digo que sea mejor, solo una alternativa. – Shygar

0

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

  • para crear una lista de viñetas, utilice 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 complete el resto vacío TableRow y sangría en la 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 dejarlo vacío
  • según mi experiencia, el cambio del parámetro de ancho no afecta el texto ni 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> 
4

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

<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> 
+0

Esto es perfecto. ¿Qué ocurre si quiero recorrer una cantidad de textviews? ¿Cómo puedo conseguir esto? – Raphael

Cuestiones relacionadas