Multiline TextView sur Android?
j'ai fait comme ci-dessous dans xml
<TableRow>
<TextView android:id="@+id/address1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:maxLines="4"
android:singleLine="false"
android:text="Johar Mor, Gulistan-e-Johar, Karachi" >
</TextView>
</TableRow>
ça ne marche pas pour multiline
, et j'utilise TableLayout
...
alors, quelle est l'erreur que je fais ici?
15 réponses
si le texte que vous mettez dans le TextView
est court, il ne s'étendra pas automatiquement à quatre lignes. Si vous voulez que le TextView
à toujours aient quatre lignes quelle que soit la longueur du texte, mettez l'attribut android:lines
:
<TextView
android:id="@+id/address1"
android:gravity="left"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:maxLines="4"
android:lines="4"
android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."></TextView>
vous pouvez le faire avec TableRow, voir ci-dessous le code
<TableRow >
<TextView
android:id="@+id/tv_description_heading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:padding="8dp"
android:text="@string/rating_review"
android:textColor="@color/black"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:maxLines="4"`enter code here`
android:padding="8dp"
android:text="The food test was very good."
android:textColor="@color/black"
android:textColorHint="@color/hint_text_color" />
</TableRow>
j'ai essayé de commenter une des réponses ci-dessus mais je n'ai pas assez de réputation.
Je pensais juste ajouter que si vous utilisez:
android:inputType="textMultiLine"
puis la vue cesse d'être cliquable. J'ai essayé d'obtenir des textviews multi-ligne dans mon menu de tiroir de diapositives qui a évidemment besoin de répondre à des clics.
le android:singleLine="false"
fonctionnait bien cependant.
Je n'aime aucune des réponses. Il suffit de définir inputType et TextView s'adaptera à son contenu
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textMultiLine"/>
testé sur Nexus One (2.3) et Nexus 4 (4.4)
il suffit d'ajouter textview dans ScrollView
<ScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="20dp"
android:fillViewport="true">
<TextView
android:id="@+id/txtquestion"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:background="@drawable/abs__dialog_full_holo_light"
android:lines="20"
android:scrollHorizontally="false"
android:scrollbars="vertical"
android:textSize="15sp" />
</ScrollView>
mettez simplement '\n' dans votre texte... no extra attribut required :)
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Pigeon\nControl\nServices"
android:id="@+id/textView5"
android:layout_gravity="center"
android:paddingLeft="12dp"/>
Je n'aime pas la solution qui force le nombre de lignes dans la vue texte. Je vous suggère plutôt de le résoudre via la solution proposée ici . Comme je le vois, L'OP a également du mal à faire en sorte que la vue de texte ressemble à la bonne dans le tableau et shrinkColumns
est la bonne directive à passer pour atteindre ce qui est voulu.
essayez de travailler avec EditText en le rendant unclickable et unfocusable, vous pouvez également afficher une barre de défilement et supprimer la barre inférieure D'EditText.
Voici un exemple:
<EditText
android:id="@+id/my_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_parent"
android:inputType="textMultiLine" <!-- multiline -->
android:clickable="false" <!-- unclickable -->
android:focusable="false" <!-- unfocusable -->
android:scrollbars="vertical" <!-- enable scrolling vertically -->
android:background="@android:color/transparent" <!-- hide the underbar of EditText -->
/>
Espérons que cela aide :)
Ce que j'ai appris, c'était d'ajouter "\n" entre les mots où vous voulez frein dans la ligne suivante. Exemple...
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAlignment="center"
android:text="M-F 9am-5pm \n By Appointment Only" />
le \N entre 17 heures et par m'a permis plus de contrôle de l'endroit où je voulais que ma prochaine ligne commence et se termine.
la meilleure réponse que j'ai trouvée pour multiline TextView est:
android:inputType="textMultiLine"
remplacer "\n"
par Html
equavalent "<br>"
Html.fromHtml()
sur la chaîne. Suivez les étapes ci-dessous:
String text= model.getMessageBody().toString().replace("\n", "<br>")
textView.setText(Html.fromHtml(Html.fromHtml(text).toString()))
Cela fonctionne parfaitement.
j'ai utilisé:
TableLayout tablelayout = (TableLayout) view.findViewById(R.id.table);
tablelayout.setColumnShrinkable(1,true);
ça a marché pour moi. 1 est le nombre de colonnes.
pour moi, aucune des solutions n'a fonctionné. Je sais que ce n'est pas une réponse complète à cette question, mais parfois, ça peut aider.
j'ai mis 4 textviews dans un linéaire vertical.
<Linearlayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation:"vertical"
...>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text:"line1"
.../>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text:"line2"
.../>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text:"line3"
.../>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text:"line4"
.../>
</LinearLayout>
cette solution est bonne pour les cas où le texte de vue de texte est constant, comme les étiquettes.
You can do this with TableRow, see below code
<TableRow >
<TextView
android:id="@+id/tv_description_heading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:padding="8dp"
android:text="@string/rating_review"
android:textColor="@color/black"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:maxLines="4"`enter code here`
android:padding="8dp"
android:text="The food test was very good."
android:textColor="@color/black"
android:textColorHint="@color/hint_text_color" />
</TableRow>
pourquoi ne pas déclarer une chaîne de caractères au lieu d'écrire de longues lignes dans le fichier de mise en page. Pour cela, vous devez déclarer une ligne de code dans le fichier de mise en page 'android:text="@string/text"' et aller à la \\app\src\main\res\values\strings.xml et ajouter une ligne de code 'votre texte multiligne ici' utilisez aussi '\n' pour casser la ligne à partir de n'importe quel autre point la ligne sera automatiquement ajustée.
TextView sera multi-ligne quand il n'aura pas assez d'espace pour s'insérer dans la ligne simple et singLine Non défini à true.
Si elle obtient l'espace dans une ligne, il ne sera pas multi-ligne.