96 votes

Comment ajouter une liste à puces à une application Android ?

Comment ajouter une liste à puces à mon aperçu de texte ?

0 votes

stackoverflow.com/a/40991388/9061224 voir si cela peut aider

200voto

browep Points 1832

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

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

&#8226; est l'entité html pour une puce de liste d'autres choix sont ici http://www.elizabethcastro.com/html/extras/entities.html

Plus d'informations sur les balises prises en charge fournies par Mark Murphy (@CommonsWare) http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html Chargez-la avec Html.fromHtml.

((TextView)findViewById(R.id.my_text_view)).setText(Html.fromHtml(myHtmlString));

1 votes

Merci pour le lien vers le site commonsware, je cherchais quelque chose comme ça depuis un certain temps !

6 votes

Veuillez noter que si vous récupérez la chaîne de caractères à partir de values/strings.xml (en utilisant context.getString(R.string.yourstring) ;), vous devrez l'entourer d'une balise CDATA : <string name="string_name"><![CDATA[ &#8226; foo<br /> &#8226; bar... ]]></string>

8 votes

Cela ne fonctionne pas s'il y a plus d'une ligne dans l'élément d'énumération.

57voto

Diego Frehner Points 942
  1. browep a expliqué gentiment le chemin sur le HTML. La solution fournie avec l'entité html peut être utile. Mais elle ne comprend que la puce. Si votre texte est enveloppé, l'indentation ne sera pas correcte.

  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é... (De même que l'utilisation d'une vue en liste).

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

  4. Mon exemple de liste non ordonnée avec des puces en utilisant 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));

Positif :

  • Les puces sont correctement mises en retrait après l'habillage du texte.
  • Vous pouvez combiner d'autres textes formatés ou non formatés dans une instance de TextView
  • Vous pouvez définir dans le constructeur de BulletSpan la taille du retrait.

Négatif :

  • Vous devez enregistrer chaque élément de la liste dans une ressource chaîne distincte. Vous ne pouvez donc pas définir votre liste de manière aussi confortable que vous le feriez en HTML.

1 votes

Cette approche (imitée à la lettre) ne fonctionne pas sur 2.2. Vous vous retrouvez avec une seule balle.

0 votes

Bonjour Skone, cela fonctionne dans l'émulateur 2.2 et dans les versions originales d'Android. J'ai vu une version Android où l'espace entre la puce et le texte était ignoré. Mais la puce apparaissait toujours. Avez-vous une nouvelle ligne à la fin de vos chaînes de puces ?

0 votes

Cette solution ne fonctionne pas lorsque vous modifiez l'espacement des lignes dans la fenêtre de texte.

40voto

Aafaq Points 516

J'ai trouvé une alternative... il suffit de copier cette puce " - " (c'est un texte) et de la coller dans le texte de votre vue texte, vous pouvez changer la couleur de la puce en changeant la couleur du texte et aussi tous les autres attributs comme la taille, la hauteur, la largeur... :)

vous pouvez utiliser un raccourci pour obtenir cette balle pendant que vous tapez.

pour Windows

ALT + 7

pour mac

ALT + 8

2 votes

Alt+7 ne fonctionne pas pour moi (peut-être est-ce seulement une chose mac ou linux) mais copier et coller le caractère unicode - a fonctionné.

2 votes

FYI : ALT + 7 ne fonctionne que si le clavier a un pavé numérique séparé.

0 votes

Si vous collez le symbole dans du code, c'est-à-dire dans une chaîne de caractères, gardez à l'esprit les problèmes liés aux caractères non ASCII et à l'encodage du fichier (essayez de changer l'encodage du fichier à partir du coin inférieur droit d'IntelliJ). Le mieux serait d'utiliser la séquence d'échappement correspondante (par ex. \u1234 ).

4voto

Nelson Ramirez Points 3364

Une option que j'ai utilisée consistait à définir le dessin de la balle à l'aide d'un style.

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

Utilisation :

<TextView android:id="@+id/tx_hdr" 
android:text="Item 1" style="@style/Text.Bullet" />

0 votes

J'ai juste pris une petite photo de balle sur le web pour le dessinable. La mise en page graphique dans Eclipse montre le graphique étiré sous le texte... plutôt loin de ce que je voulais.

1 votes

Je pense qu'il voulait dire android:drawableLeft=

3voto

abhiweb Points 21

[Mise à jour : 2021]

J'ai remarqué que ma réponse datait d'il y a 8 ans et j'ai décidé de la mettre à jour en fonction des éléments suivants la dernière documentation Android pour styliser du texte avec des balises HTML :

  • Utilisez des balises HTML comme <ul> & <li> dans vos ressources de chaîne. Ces balises et bien d'autres sont prises en charge !
  • Si vous n'appliquez pas de formatage, vous pouvez définir le texte du TextView directement en appelant setText()
  • C'est mieux que de coller directement le ou c'est un hexcode si vous voulez préserver l'indentation dans les chaînes de caractères à plusieurs lignes.

Ma vieille réponse de 2013 :

Les listes à puces peuvent être créées à l'aide de la fonction <ul> y <li> dans la ressource chaîne.

NE PAS UTILISER setText(Html.fromHtml(string)) pour définir la chaîne de caractères dans le code ! Il suffit de définir la chaîne normalement dans le xml ou en utilisant setText( chaîne de caractères ).

Par exemple

fichier strings.xml

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

_layout.xml file_ ``` ```
Il produira le résultat suivant :

  • premièrement article
  • point 2

Les balises suivantes sont prises en charge de cette manière (directement intégrées dans la ressource chaîne) :

  • <a> (supporte les attributs "href")
  • <annotation>
  • <b>
  • <big>
  • <font> (supporte les attributs "height", "size", "fgcolor" et "bicolor", sous forme d'entiers)
  • <i>
  • <li>
  • <marque>
  • <small>
  • <strike>
  • <sup>
  • <tt>
  • <u>

0 votes

Vous n'avez pas besoin de la <ul>

6 votes

Does not work. Les balises html supportées sont <b>,<i>et <u>uniquement. developer.Android.com/guide/topics/resources/

1 votes

Cela a parfaitement fonctionné pour moi ! La seule chose que j'ai eu à faire pour que tout fonctionne a été de mettre \n au début de chaque ligne, soit \n<ul><li>a</li> \n<li>b</li> \n<li>c</li></ul>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X