Toute idée de corps à ce sujet, Comment définir le texte de soulignement sur TextView? si oui, dites-le.
j'ai utilisé le code suivant mais cela ne fonctionne pas.
tvHide.setText(Html.fromHtml("<p><u>Hide post</u></p>").toString());
Merci d'avance
Vous devez utiliser SpannableString pour cela:
String mystring=new String("Hello.....");
SpannableString content = new SpannableString(mystring);
content.setSpan(new UnderlineSpan(), 0, mystring.length(), 0);
yourtextview.setText(content);
Mise à jour: Vous pouvez référer ma réponse sur Underling TextView ici de toutes les manières possibles.
Voici quelques approches pour le texte souligné dans Android:
1ère approche
Vous pouvez définir votre chaîne dans strings.xml
<string name="your_string"><u>Underlined text</u></string>
Et utilisez cette chaîne dans votre fichier xml
<TextView
Android:id="@+id/txt_underlined"
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:text="@string/your_string"/>
O vous pouvez utiliser cette chaîne dans votre activité/fragment
txtView.setText(R.string.your_string);
2ème approche
Pour souligner le texte dans TextView, vous pouvez utiliser SpannableString
String text="Underlined Text";
SpannableString content = new SpannableString(text);
content.setSpan(new UnderlineSpan(), 0, text.length(), 0);
txtView.setText(content);
e approche
Vous pouvez utiliser la méthode setPaintFlags de TextView pour souligner le texte de TextView.
txtView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
txtView.setText("Underlined Text");
4ème approche
Utilisez Html.fromHtml(htmlString)
;
String htmlString="<u>Underlined Text</u>";
txtView.setText(Html.fromHtml(htmlString));
O
txtView.setText(Html.fromHtml("<u>underlined</u> text"));
Remarque:
Si vous avez ajouté cette ligne Android:textAllCaps="true"
Dans votre mise en page, rien de ce qui précède ne fonctionnera. Pour cela, vous devez définir votre chaîne en majuscules, puis l'une des approches ci-dessus.
tilisez ceci
tvHide.setPaintFlags(tvHide.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Android prend en charge le formatage des chaînes à l'aide des balises [~ # ~] html [~ # ~] dans les chaînes xml. Donc, ce qui suit fonctionnerait:
<string name="label_testinghtmltags"><u>This text has an underscore</u></string>
Ensuite, vous l'utilisez comme vous le feriez normalement. Vous pouvez en voir plus dans la documentation ici
Mise à jour:
Pour développer davantage la réponse, la documentation dit:
... les méthodes
format(String, Object...)
etgetString(int, Object...)
suppriment toutes les informations de style de la chaîne. . La solution consiste à écrire les balises HTML avec des entités échappées, qui sont ensuite récupérées avec fromHtml (String), après le formatage.
Par exemple, la chaîne résultante de l'extrait de code suivant n'apparaîtra pas comme contenant des éléments soulignés:
<string name="html_bold_test">This <u>%1$s</u> has an underscore</string>
String result = getString(R.string.html_bold_test, "text")
Cependant, le résultat de l'extrait de code suivant contiendrait des traits de soulignement:
<string name="html_bold_test">This <u> %1$s </u> has an underscore</string>
String result = Html.fromHtml(getString(R.string.html_bold_test, "text"))
Essayez ceci,
tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
vous y êtes presque: n'appelez simplement pas toString()
sur Html.fromHtml()
et vous obtenez un objet étendu qui fera le travail;)
tvHide.setText(Html.fromHtml("<p><u>Hide post</u></p>"));
Pas besoin d'utiliser les propriétés HTML, concentrons-nous sur Java xD J'ai eu le même problème, j'ai trouvé le moyen de le faire en Java:
String text="Hide post";
TextView tvHide=(TextView)findViewById(R.id.text);
SpannableString spanString = new SpannableString(text);
spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
tvHide.setText(spanString );
Je crois que vous devez utiliser CharSequence . Vous pouvez trouver un exemple ici .
Vous pouvez le faire comme:
tvHide.setText(Html.fromHtml("<p><span style='text-decoration: underline'>Hide post</span></p>").toString());
J'espère que cela t'aides
Un moyen simple et facile d'afficher le soulignement dans TextView
est:
yourTextView.getPaint().setUnderlineText(true);
Et si vous souhaitez supprimer le soulignement pour cette vue, vous pouvez écrire le code ci-dessous:
yourTextView.getPaint().setUnderlineText(false);
Cela fonctionnera même si vous définissez Android:textAllCaps="true"
Vous pouvez facilement ajouter une vue avec la hauteur de 1dp alignant le début et la fin de TextView, juste en dessous. Vous pouvez également utiliser marginTop avec une valeur négative pour rapprocher le soulignement de TextView. Si vous utilisez votre TextView et le dessous dans une disposition relative, ce serait beaucoup plus facile pour les alignements. voici l'exemple:
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<View
Android:id="@+id/viewForgotPasswordUnderline"
Android:layout_width="wrap_content"
Android:layout_height="1dp"
Android:layout_below="@id/txtForgotPassword"
Android:layout_alignStart="@id/txtForgotPassword"
Android:layout_alignEnd="@id/txtForgotPassword"
Android:layout_marginTop="-2dp"
Android:background="@color/lightGray" />
<androidx.appcompat.widget.AppCompatTextView
Android:id="@+id/txtForgotPassword"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:paddingTop="8dp"
Android:text="@string/userLoginForgotPassword"
Android:textColor="@color/lightGray"
Android:textSize="16dp" />
</RelativeLayout>