Comment append une liste à puces à une application Android?

J’ai googlé ma question mais il n’y a pas de réponse fonctionnelle fournie. Comment append une liste à puces à ma textview.

Difficile à faire comme ul / li / ol ne sont pas supportés. Heureusement, vous pouvez l’utiliser comme sucre syntaxique:

• foo
• bar
• baz

est l’entité HTML pour une liste bullet plus de choix sont ici http://www.elizabethcastro.com/html/extras/entities.html

En savoir plus sur les tags pris en charge par Mark Murphy (@CommonsWare) http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html Chargez-le avec Html.fromHtml

 ((TextView)findViewById(R.id.my_text_view)).setText(Html.fromHtml(myHtmlSsortingng)); 
  1. Browep a bien expliqué le chemin du HTML. La solution fournie avec l’entité html peut être utile. Mais il ne comprend que la balle. Si votre texte se déroule, le retrait ne sera pas correct.

  2. J’ai trouvé d’autres solutions intégrant une vue Web. C’est peut-être approprié pour certains, mais je pense que c’est un peu exagéré … (Même chose avec l’utilisation d’une vue liste.)

  3. J’aime l’ approche créative de Nelson : D, mais cela ne vous donne pas la possibilité d’append une liste non ordonnée à une vue de texte.

  4. Mon exemple d’une liste non ordonnée avec des puces en utilisant BulletSpan

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

Positif:

  • Les puces avec un retrait correct après le retour à la ligne.
  • Vous pouvez combiner un autre texte formaté ou non dans une instance de TextView
  • Vous pouvez définir dans le constructeur BulletSpan la taille du retrait.

Négatif:

  • Vous devez enregistrer chaque élément de la liste dans une ressource de chaîne distincte. Vous ne pouvez donc pas définir votre liste comme vous le pouvez en HTML.

J’ai trouvé une alternative .. Il suffit de copier cette puce “•” (c’est un texte) et de coller le texte de votre vue texte, vous pouvez changer la couleur de la puce en changeant la couleur et tous les autres atsortingbuts comme taille, largeur. .. 🙂

vous pouvez utiliser le raccourci pour obtenir cette balle tout en tapant

Pour les fenêtres

ALT + 7

pour Mac

ALT + 8

Inspiré par les différentes réponses fournies ici, j’ai créé un cours utilitaire pour en faire un modèle facile . Cela créera une liste à puces avec indentation pour le texte enveloppé. Il dispose de méthodes pour combiner des chaînes, des ressources de chaîne et des ressources de tableau de chaînes.

Il va créer un CharSequence que vous pouvez transmettre à un TextView. Par exemple:

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

J’espère que c’est utile. Prendre plaisir.

Note: Ceci utilisera la puce standard du système, un petit cercle de la même couleur que le texte. Si vous souhaitez une puce personnalisée, envisagez de sous- classer BulletSpan et de substituer drawLeadingMargin() pour dessiner la puce souhaitée. Jetez un coup d’œil à la source BulletSpan pour savoir comment cela fonctionne.

 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 ssortingngArrayResId A resource id pointing to a ssortingng array. Each ssortingng will be a separate line/bullet-point. * @return */ public static CharSequence makeBulletListFromSsortingngArrayResource(int leadingMargin, Context context, int ssortingngArrayResId) { return makeBulletList(leadingMargin, context.getResources().getSsortingngArray(ssortingngArrayResId)); } /** * 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 ssortingng resource ids. Each ssortingng will be a separate line/bullet-point. * @return */ public static CharSequence makeBulletListFromSsortingngResources(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; } } 

Une option que j’ai utilisée était de définir le dessin de la puce à l’aide d’un style.

  

Usage:

  

utiliser TextView simple avec un dessin dessiné composé. Par exemple

   

C’est de loin le plus facile ..

 \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 Indussortinges of India (FII). 

Voici une liste à puces avec un en-tête et un onglet devant chaque élément.

 public class BulletListBuilder { private static final Ssortingng SPACE = " "; private static final Ssortingng BULLET_SYMBOL = "•"; private static final Ssortingng EOL = System.getProperty("line.separator"); private static final Ssortingng TAB = "\t"; private BulletListBuilder() { } public static Ssortingng getBulletList(Ssortingng header, Ssortingng []items) { SsortingngBuilder listBuilder = new SsortingngBuilder(); if (header != null && !header.isEmpty()) { listBuilder.append(header + EOL + EOL); } if (items != null && items.length != 0) { for (Ssortingng item : items) { Spanned formattedItem = Html.fromHtml(BULLET_SYMBOL + SPACE + item); listBuilder.append(TAB + formattedItem + EOL); } } return listBuilder.toSsortingng(); } } 

Nous avons complètement surchargé et avons créé une vue de texte personnalisée.

Utilisez-le comme ceci:

  

et le code:

 package com.blundell; import android.content.Context; import android.text.Html; import android.util.AtsortingbuteSet; import android.widget.TextView; public class BulletTextView extends TextView { private static final Ssortingng SPLITTER_CHAR = "--"; private static final Ssortingng NEWLINE_CHAR = "
"; private static final Ssortingng HTML_BULLETPOINT = "•"; public BulletTextView(Context context, AtsortingbuteSet attrs) { this(context, attrs, android.R.attr.textViewStyle); } public BulletTextView(Context context, AtsortingbuteSet attrs, int defStyle) { super(context, attrs, defStyle); checkForBulletPointSplitter(); } private void checkForBulletPointSplitter() { Ssortingng text = (Ssortingng) getText(); if (text.contains(SPLITTER_CHAR)) { injectBulletPoints(text); } } private void injectBulletPoints(Ssortingng text) { Ssortingng newLinedText = addNewLinesBetweenBullets(text); Ssortingng htmlBulletText = addBulletPoints(newLinedText); setText(Html.fromHtml(htmlBulletText)); } private Ssortingng addNewLinesBetweenBullets(Ssortingng text) { Ssortingng newLinedText = text.replace(SPLITTER_CHAR, NEWLINE_CHAR + SPLITTER_CHAR); newLinedText = newLinedText.replaceFirst(NEWLINE_CHAR, ""); return newLinedText; } private Ssortingng addBulletPoints(Ssortingng newLinedText) { return newLinedText.replace(SPLITTER_CHAR, HTML_BULLETPOINT); } }

Voici une autre solution, sans append exactement une liste à une vue de texte, mais je suppose que l’objective est le même. Il utilise TableLayout, qui ne nécessite que du XML et est très simple pour les petites listes ordonnées ou non ordonnées. Ci-dessous, exemple de code que j’ai utilisé pour cela, pas une ligne de code en Java.

Positif:

  • vous pouvez mettre ce que vous voulez dans les lignes de la table, ne doit pas être un textview
  • vous pouvez l’utiliser pour créer une liste à puces et numérotée ou autre
  • vous pouvez définir une indentation en utilisant padding ou layout_weight

Négatif:

  • fastidieux pour les très longues listes (sauf si vous utilisez un éditeur de texte astucieux avec regex)
  • chaque élément de la liste est stocké en tant que ressource de chaîne distincte

                   

et le style:

  

Je trouve cela le plus simple, laissez le textView tel qu’il est dans le fichier xml et utilisez le code java suivant. cela fonctionnait parfaitement bien pour moi.

 private static final Ssortingng BULLET_SYMBOL = "•"; @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")); } 

Les deux options que vous avez pour faire une liste à puces sont

  • créer la liste en utilisant html (ul, ol) et charger le HTML dans une WebView
  • Chargez les données dans une vue ListView et définissez le dessin à gauche de votre vue texte dans la disposition de l’élément de liste sur une image appropriée pour la puce.

L’option 1 est la plus facile.

La liste à puces peut être créée simplement en utilisant les balises

    et

  • dans la ressource de chaîne.

    N’UTILISEZ PAS setText (Html.fromHtml (ssortingng)) pour définir la chaîne dans le code! Il suffit de définir la chaîne normalement dans XML ou en utilisant setText ( ssortingng ).

    Par exemple:

    fichier ssortingngs.xml

     
    • first item
    • item 2

    fichier layout.xml

       

    Il produira le résultat suivant:

    • premier article
    • article 2

    Les balises suivantes sont supscopes comme ceci (directement incorporées dans la ressource ssortingng):

    Une autre façon de prendre en charge les balises HTML manquantes consiste à les remplacer correctement, comme illustré ici.