J'ai un TextView que je remplis avec le texte d'une chaîne de ressources dans strings.xml. La ressource chaîne contient des éléments <li> pour créer une liste à puces dans TextView. Mon problème est que je veux contrôler l'indentation des lignes dans la liste à puces qui couvrent plus d'une ligne. Par défaut, le texte n'est pas indenté au-delà de la balle, il a donc l'air un peu moche. Est-il possible de faire cela avec des paramètres de style ou de créer des puces d'une autre manière?
Merci d'avance.
edit: Est-ce vraiment répondu? Je n'ai aucun problème à produire la liste à puces, comme décrit dans ces liens, mais je ne parviens pas à obtenir la mise en page correcte. Le retrait est comme ça:
Et je veux que le "de la ligne" commence au moins en retrait jusqu'au texte qui suit la balle. C'est ce que j'essaie de réaliser.
Je suis surpris que personne ne semble avoir ce problème. Je veux dire, liste de puces ne peut pas être aussi rare dans about-dialogs, FAQ etc. et une puce ne doit pas contenir trop de texte pour couvrir plus d'une ligne et rencontrer ce problème.
Quoi qu'il en soit, je dois le résoudre comme ceci pour l'instant:
<?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>
Je l'utilise pour présenter du texte statique dans une liste à puces afin d'éviter de créer la puce + texte dynamiquement dans le code. Si quelqu'un a des suggestions pour améliorer la même chose, éclairez-moi s'il vous plaît.
Btw, si aller avec la solution proposée dans le deuxième lien ci-dessus:
Android:text="<ol><li>item 1\n</li><li>item 2\n</li></ol>
Les deuxième, troisième, etc. lignes d'une puce couvrant plus d'une ligne n'obtiendront pas le même retrait que la première ligne, ce qui est plutôt moche.
Merci @Bjorn
Vous pouvez également faire quelque chose comme ci-dessous.
<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>
J'ai résolu ce problème en utilisant RelativeLayout et marginLeft. MarginLeft mettra une marge vide entre celui-ci et l'élément précédent.
<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>
J'essaie juste de souligner la réponse clé de la question:
TableLayout
avec deux colonnes pour chaque ligne. Une colonne pour TextView
d'une puce et l'autre pour le texteTextView
remplisse le reste vide TableRow
et mis en retrait à la nouvelle ligne, définissez le poids sur 1. Vous pouvez définir le poids de la balle sur zéro ou tout simplement ne pas le définir et le laisser videExemple:
<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>