2010-09-15 10 views
24

Ho un TextView che riempio con il testo da una stringa di risorse in strings.xml. La risorsa stringa contiene < li> elementi per creare un elenco puntato all'interno di TextView. Il mio problema è che voglio controllare l'indentazione delle linee nella lista proiettile che si estendono su più di una linea. Predefinito il testo non è indentato oltre il proiettile quindi sembra un po 'brutto. È possibile farlo con parametri di stile o creare proiettili in qualche altro modo?Elenco puntini di rientro in TextView

Grazie in anticipo.

modifica: È davvero una risposta? Non ho alcun problema a produrre la lista dei proiettili, come descritto in quei collegamenti, ma sto avendo problemi a correggere il layout. Il rientro è come questo:

  • testo che vanno oltre la larghezza
    della linea.

E voglio che il "della linea" per iniziare almeno rientrato fino al testo dopo il punto. Questo è quello che cerco di raggiungere.

+0

Questa domanda è già stata posta. Possibile duplicato di 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, non penso che questo sia un duplicato. La domanda che hai citato chiede di avere un simbolo di proiettile, piuttosto che una lista di proiettili. –

risposta

20

Sono sorpreso che non sembra esserci nessuno con questo problema. Voglio dire, la lista non può essere così rara in about-dialogs, FAQ ecc. E un proiettile non deve contenere troppo testo per estendersi su più di una riga e imbattersi in questo problema.

In ogni caso, ho avuto modo di risolverlo in questo modo, per ora:

<?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> 

Io lo uso per presentare il testo statico in un elenco puntato in modo da non si preoccupano per creare il proiettile + testo dinamicamente nel codice. Se qualcuno ha qualche suggerimento su come realizzare la stessa cosa in un modo migliore, per favore illuminami.

Btw, se andare con la soluzione suggerita in secondo link sopra:

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

La seconda, terza fila, ecc in un proiettile che si estendono su più di una riga non sarà possibile ottenere lo stesso rientro in prima linea , che è abbastanza brutto.

+0

Grazie, E anche se vuoi aggiungere un'immagine personalizzata per il bullete, possiamo fare così – Dharmik

0

Il modo in cui ho risolto questo problema era utilizzando un RelativeLayout e marginLeft. Il margine sinistro metterà un margine vuoto tra esso e l'elemento precedente.

<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

Com'è diverso dalla [risposta di Björn] (http://stackoverflow.com/a/3871309/94363)? – rds

+1

Ho suggerito di utilizzare 'android: lineSpacingExtra = "3sp"' della vista di testo, invece di utilizzare . Non dire che è meglio, solo un'alternativa. – Shygar

0

Solo cercando di sottolineare la risposta chiave della questione:

  • per creare un elenco di proiettile, utilizzare TableLayout con due colonne per ogni riga. Una colonna per TextView di un proiettile e l'altra per il testo
  • per rendere il testo TextView riempire il resto vuota TableRow e rientrato in nuova linea, impostare il peso a 1. È possibile impostare il peso della palla a zero o semplicemente non imposta il peso del proiettile e lascialo vuoto
  • in base alla mia esperienza, il cambiamento dei parametri di larghezza non ha effetto sul testo e sul punto elenco. Quindi puoi lasciarlo vuoto o impostarlo su qualsiasi cosa tu voglia.

Esempio:

<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

Grazie @Bjorn
si può anche fare qualcosa di simile a soffietto.

<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

Questo è perfetto. Cosa succede se voglio scorrere un numero di visualizzazioni di testo. Come posso raggiungere questo obiettivo? – Raphael