Come aggiungere elenco puntato per applicazioni Android?

voti
73

Googled la mia domanda, ma ci non funziona risposta fornita. Come non aggiungere un elenco puntato al mio TextView.

È pubblicato 14/02/2011 alle 14:38
fonte dall'utente
In altre lingue...                            


16 risposte

voti
0

Le due opzioni che avete per fare un elenco puntato sono

  • creare l'elenco utilizzando HTML (ul, ol) e caricare il codice HTML in una WebView
  • Caricare i dati in un controllo ListView e impostare drawable sinistra della visualizzazione di testo nel layout elemento della lista, ad un'immagine adatta per il proiettile.

Opzione 1 è il più facile.

Risposto il 14/02/2011 a 14:52
fonte dall'utente

voti
164

Difficile da fare come ul / li / ol non sono supportati. Fortunatamente è possibile utilizzare questo come zucchero sintattico:

&#8226; foo<br/>
&#8226; bar<br/>
&#8226; baz<br/>

&#8226;è l'entità HTML per un proiettile lista più scelte sono qui http://www.elizabethcastro.com/html/extras/entities.html

informazioni su quali tag sono supportati forniti da Mark Murphy (@CommonsWare) http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html carico che con Html.fromHtml

((TextView)findViewById(R.id.my_text_view)).setText(Html.fromHtml(myHtmlString));
Risposto il 05/05/2011 a 02:36
fonte dall'utente

voti
4

Un'opzione che ho usato è stato quello di impostare il drawable proiettile utilizzando uno stile.

<style name="Text.Bullet">
    <item name="android:background">@drawable/bullet</item>
    <item name="android:paddingLeft">10dp</item>
</style>

Uso:

<TextView android:id="@+id/tx_hdr" 
android:text="Item 1" style="@style/Text.Bullet" />
Risposto il 10/05/2011 a 17:20
fonte dall'utente

voti
46
  1. browep spiegato bella la strada sopra HTML. La soluzione fornita con l'entità HTML può essere utile. Ma include solo il proiettile. Se il testo avvolge, il rientro non sarà corretta.

  2. Ho trovato altre soluzioni che incorporano un vista web. Che forse è appropriato per un po ', ma credo che questo tipo di eccessivo ... (Lo stesso con l'utilizzo di una visualizzazione elenco.)

  3. Mi piace l' approccio creativo di Nelson : D, ma non ti dà la possibilità di aggiungere una lista non ordinata ad una visione del testo.

  4. Il mio esempio di una lista non ordinata con proiettili utilizzando BulletSpan

    CharSequence t1 = getText(R.string.xxx1);
    SpannableString s1 = new SpannableString(t1);
    s1.setSpan(new BulletSpan(15), 0, t1.length(), 0);
    CharSequence t2 = getText(R.string.xxx2);
    SpannableString s2 = new SpannableString(t2);
    s2.setSpan(new BulletSpan(15), 0, t2.length(), 0);
    textView.setText(TextUtils.concat(s1, s2));
    

Positivo:

  • Richiami con corretta trattino dopo avvolge testo.
  • È possibile combinare altro testo formattato formattato o meno in un caso di TextView
  • È possibile definire nel costruttore BulletSpan quanto è grande il rientro dovrebbe essere.

Negativo:

  • È necessario salvare ogni elemento della lista in una risorsa di stringa separata. Quindi u non può definire la vostra lista che confortevole come si potrebbe in HTML.
Risposto il 05/08/2011 a 11:33
fonte dall'utente

voti
22

Ho trovato un supplente .. basta copiare questo proiettile "•" (si tratta di un testo) e incollare nel testo della visualizzazione del testo, è possibile modificare il colore proiettile cambiando la TextColor e così tutti gli altri attributi come la dimensione, larghezza altezza. .. :)

è possibile utilizzare scorciatoia per arrivare a questo proiettile durante la digitazione

per le finestre

ALT + 7

per Mac

ALT + 8

Risposto il 11/04/2012 a 05:32
fonte dall'utente

voti
2

Ecco un elenco puntato con un colpo di testa e di una scheda di fronte a ogni elemento.

public class BulletListBuilder {

    private static final String SPACE = " ";
    private static final String BULLET_SYMBOL = "&#8226";
    private static final String EOL = System.getProperty("line.separator");
    private static final String TAB = "\t";

    private BulletListBuilder() {

    }

    public static String getBulletList(String header, String []items) {
        StringBuilder listBuilder = new StringBuilder();
        if (header != null && !header.isEmpty()) {
            listBuilder.append(header + EOL + EOL);
        }
        if (items != null && items.length != 0) {
            for (String item : items) {
                Spanned formattedItem = Html.fromHtml(BULLET_SYMBOL + SPACE + item);
                listBuilder.append(TAB + formattedItem + EOL);
            }
        }
        return listBuilder.toString();
    }

}
Risposto il 01/04/2013 a 13:21
fonte dall'utente

voti
0

Elenco puntato può essere semplicemente creato utilizzando l' <ul>e <li>tag nella risorsa di stringa.

NON USARE setText (Html.fromHtml (stringa)) per impostare la stringa di codice! Basta impostare la stringa normalmente in XML o utilizzando setText ( stringa ).

Per esempio:

file di strings.xml

<string name="str1"><ul> <li><i>first</i> item</li> <li>item 2</li> </ul></string>


file di layout.xml

    <TextView
        android:text="@string/str1"
    />


Si produrrà il seguente risultato:

  • prima voce
  • punto 2


Seguenti tag sono supportati in questo modo (direttamente incorporato nel risorsa di tipo stringa):

  • <a> (supporta gli attributi "href")
  • <Annotation>
  • <B>
  • <Big>
  • <Font> (supporta gli attributi "altezza", "dimensione", "colore_primo_piano" e "bicolore", come numeri interi)
  • <I>
  • <Li>
  • <Marquee>
  • <Small>
  • <Strike>
  • <Sub>
  • <Sup>
  • <Tt>
  • <U>
Risposto il 08/05/2013 a 13:57
fonte dall'utente

voti
1

Trovo che questo sia il modo più semplice, lasciare la textView come è nel file XML e utilizzare il seguente codice Java. ha funzionato perfettamente bene per me.

private static final String BULLET_SYMBOL = "&#8226";

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tutorial);

    TextView tv = (TextView) findViewById(R.id.yourTextView);

    tv.setText("To perform this exercise you will need the following: "
                        + System.getProperty("line.separator")//this takes you to the next Line
                        + System.getProperty("line.separator")
                        + Html.fromHtml(BULLET_SYMBOL + " Bed")
                        + System.getProperty("line.separator")
                        + Html.fromHtml(BULLET_SYMBOL + " Pillow"));
}
Risposto il 20/06/2013 a 09:23
fonte dall'utente

voti
2

Andato completamente eccessivo e reso una vista testo personalizzato.

Utilizzare in questo modo:

<com.blundell.BulletTextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="--bullet 1 --bullet two --bullet three --bullet four" />

e il codice:

package com.blundell;

import android.content.Context;
import android.text.Html;
import android.util.AttributeSet;
import android.widget.TextView;

public class BulletTextView extends TextView {
    private static final String SPLITTER_CHAR = "--";
    private static final String NEWLINE_CHAR = "<br/>";
    private static final String HTML_BULLETPOINT = "&#8226;";

    public BulletTextView(Context context, AttributeSet attrs) {
        this(context, attrs, android.R.attr.textViewStyle);
    }

    public BulletTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        checkForBulletPointSplitter();
    }

    private void checkForBulletPointSplitter() {
        String text = (String) getText();
        if (text.contains(SPLITTER_CHAR)) {
            injectBulletPoints(text);
        }
    }

    private void injectBulletPoints(String text) {
        String newLinedText = addNewLinesBetweenBullets(text);
        String htmlBulletText = addBulletPoints(newLinedText);
        setText(Html.fromHtml(htmlBulletText));
    }

    private String addNewLinesBetweenBullets(String text) {
        String newLinedText = text.replace(SPLITTER_CHAR, NEWLINE_CHAR + SPLITTER_CHAR);
        newLinedText = newLinedText.replaceFirst(NEWLINE_CHAR, "");
        return newLinedText;
    }

    private String addBulletPoints(String newLinedText) {
        return newLinedText.replace(SPLITTER_CHAR, HTML_BULLETPOINT);
    }

}
Risposto il 02/09/2013 a 16:18
fonte dall'utente

voti
0

Un altro modo per sostenere i tag HTML mancanti, è sostituendo loro bene, come mostrato qui

Risposto il 01/03/2014 a 17:17
fonte dall'utente

voti
4

utilizzare semplici TextView con drawable composto. Per esempio

<TextView     
    android:text="Sample text"
    android:drawableLeft="@drawable/bulletimage" >
</TextView>
Risposto il 26/05/2014 a 16:54
fonte dall'utente

voti
15

Ispirato dalle varie risposte qui, ho creato una classe di utilità per rendere questo un facile uno di linea . Questo creerà un elenco puntato con rientro per il testo avvolto. Ha metodi per archi, che conciliano, risorse di tipo stringa e le risorse di array di stringhe.

Si creerà una CharSequence quale si può passare ad una TextView. Per esempio:

CharSequence bulletedList = BulletListUtil.makeBulletList("First line", "Second line", "Really long third line that will wrap and indent properly.");
textView.setText(bulletedList);

La speranza è utile. Godere.

Nota: Questo utilizzerà il proiettile standard di sistema, un piccolo cerchio dello stesso colore del testo. Se si desidera un proiettile personalizzato, considerare sottoclasse BulletSpan e ignorando la sua drawLeadingMargin()per disegnare il proiettile che si desidera. Date un'occhiata alla fonte BulletSpan per un'idea di come funziona.

public class BulletTextUtil {

/**
 * Returns a CharSequence containing a bulleted and properly indented list.
 *
 * @param leadingMargin In pixels, the space between the left edge of the bullet and the left edge of the text.
 * @param context
 * @param stringArrayResId A resource id pointing to a string array. Each string will be a separate line/bullet-point.
 * @return
 */
public static CharSequence makeBulletListFromStringArrayResource(int leadingMargin, Context context, int stringArrayResId) {
    return makeBulletList(leadingMargin, context.getResources().getStringArray(stringArrayResId));
}

/**
 * Returns a CharSequence containing a bulleted and properly indented list.
 *
 * @param leadingMargin In pixels, the space between the left edge of the bullet and the left edge of the text.
 * @param context
 * @param linesResIds An array of string resource ids. Each string will be a separate line/bullet-point.
 * @return
 */
public static CharSequence makeBulletListFromStringResources(int leadingMargin, Context context, int... linesResIds) {
    int len = linesResIds.length;
    CharSequence[] cslines = new CharSequence[len];
    for (int i = 0; i < len; i++) {
        cslines[i] = context.getString(linesResIds[i]);
    }
    return makeBulletList(leadingMargin, cslines);
}

/**
 * Returns a CharSequence containing a bulleted and properly indented list.
 *
 * @param leadingMargin In pixels, the space between the left edge of the bullet and the left edge of the text.
 * @param lines An array of CharSequences. Each CharSequences will be a separate line/bullet-point.
 * @return
 */
public static CharSequence makeBulletList(int leadingMargin, CharSequence... lines) {
    SpannableStringBuilder sb = new SpannableStringBuilder();
    for (int i = 0; i < lines.length; i++) {
        CharSequence line = lines[i] + (i < lines.length-1 ? "\n" : "");
        Spannable spannable = new SpannableString(line);
        spannable.setSpan(new BulletSpan(leadingMargin), 0, spannable.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        sb.append(spannable);
    }
    return sb;
}

}
Risposto il 15/01/2015 a 12:07
fonte dall'utente

voti
1

Ecco un'altra soluzione, non esattamente l'aggiunta di un elenco per una TextView, ma credo che l'obiettivo è lo stesso. E 'utilizzando TableLayout, che ha bisogno solo di XML ed è davvero semplice per le piccole liste ordinate o non ordinate. Qui di seguito, il codice di esempio ho utilizzato per questo, non una riga di codice in Java.

Positivo:

  • si può mettere quello che vuoi in righe della tabella, non è necessario essere un TextView
  • è possibile utilizzarlo per creare l'elenco puntati e numerati o qualsiasi altra cosa
  • è possibile definire trattino usando imbottiture o layout_weight

Negativo:

  • noioso per molto lunghi elenchi (a meno che non si utilizzano alcuni editor di testo furbo con espressioni regolari)
  • ogni elemento della lista è il negozio come una risorsa di stringa separata

        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
    
            >
    
            <TextView
                style="@style/helpPagePointsStyle"
                android:layout_weight="0.2"
                android:text="1." />
    
            <TextView
                style="@style/helpPagePointsStyle"
                android:layout_weight="3"
                android:text="@string/help_points1" />
        </TableRow>
    
        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >
            <TextView
                style="@style/helpPagePointsStyle"
                android:layout_weight="0.2"
                android:text="2." />
    
            <TextView
                style="@style/helpPagePointsStyle"
                android:layout_weight="3"
                android:text="@string/help_points2" />
        </TableRow>
        <TableRow
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >
            <TextView
                style="@style/helpPagePointsStyle"
                android:layout_weight="0.2"
                android:text="3." />
            <TextView
                style="@style/helpPagePointsStyle"
                android:layout_weight="3"
                android:text="@string/help_points3" />
        </TableRow>
    
    
    </TableLayout>
    

e lo stile:

<style name="helpPagePointsStyle">
    <item name="android:layout_width">0dp</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:gravity">left</item>
</style>
Risposto il 27/08/2015 a 20:18
fonte dall'utente

voti
3

Questo è di gran lunga il più facile ..

<string name="bullet_ed_list">\n\u2022 He has been Chairman of CFL Manufacturers Committee of ELCOMA, the All India Association of Lighting Equipment Manufacturers.
\n\u2022 He has been the President of Federation of Industries of India (FII).</string>
Risposto il 12/04/2016 a 07:06
fonte dall'utente

voti
0

Pronto-uso per estensione Kotlin

fun List<String>.toBulletedList(): CharSequence {
    return SpannableString(this.joinToString("\n")).apply {
        this@toBulletedList.foldIndexed(0) { index, acc, span ->
            val end = acc + span.length + if (index != this@toBulletedList.size - 1) 1 else 0
            this.setSpan(BulletSpan(16), acc, end, 0)
            end
        }
    }
}

Uso:

val bulletedList = listOf("One", "Two", "Three").toBulletedList()
label.text = bulletedList
Risposto il 29/07/2019 a 17:25
fonte dall'utente

voti
0

Se si desidera creare elenco puntato con struttura EditText.

Ho beneficiato questo riferimenti

È possibile utilizzare questi proiettili

           EditText  edtNoteContent = findViewById(R.id.editText_description_note);            

        edtNoteContent.addTextChangedListener(new TextWatcher(){
            @Override
            public void afterTextChanged(Editable e) {

            }
            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

            }
            @Override
            public void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter)
            {
                if (lengthAfter > lengthBefore) {
                    if (text.toString().length() == 1) {
                        text = "◎ " + text;
                        edtNoteContent.setText(text);
                        edtNoteContent.setSelection(edtNoteContent.getText().length());
                    }
                    if (text.toString().endsWith("\n")) {
                        text = text.toString().replace("\n", "\n◎ ");
                        text = text.toString().replace("◎ ◎", "◎");
                        edtNoteContent.setText(text);
                        edtNoteContent.setSelection(edtNoteContent.getText().length());
                    }
                }
            }
        });
Risposto il 03/12/2019 a 15:04
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more