web-dev-qa-db-fra.com

Comment définir le style de police en gras, en italique et souligné dans un Android TextView?

Je veux rendre le contenu d'une TextView gras, italique et souligné. J'ai essayé le code suivant et cela fonctionne, mais ne souligne pas.

<Textview Android:textStyle="bold|italic" ..

Comment fait-on ça? Des idées rapides?

407
d-man

Je ne sais pas sur le soulignement, mais pour les caractères gras et italiques, il y a "bolditalic". Il n'y a aucune mention de soulignement ici: http://developer.Android.com/reference/Android/widget/TextView.html#attr_Android:textStyle

Notez que pour utiliser la bolditalic mentionnée, vous devez, et je cite cette page.

Doit être un ou plusieurs (séparés par '|') des valeurs constantes suivantes.

donc vous utiliseriez bold|italic

Vous pouvez cocher cette question pour souligner: Puis-je souligner un texte dans une mise en page Android?

258
Nanne

Ceci devrait rendre votre TextView gras , souligné et italique en même temps.

strings.xml

<resources>
    <string name="register"><u><b><i>Copyright</i></b></u></string>
</resources>

Pour définir cette chaîne sur votre TextView, faites ceci dans votre main.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/textview"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:text="@string/register" />

ou en Java ,

TextView textView = new TextView(this);
textView.setText(R.string.register);

Parfois, l'approche ci-dessus ne sera pas utile lorsque vous devrez peut-être utiliser du texte dynamique. Donc, dans ce cas SpannableString entre en action.

String tempString="Copyright";
TextView text=(TextView)findViewById(R.id.text);
SpannableString spanString = new SpannableString(tempString);
spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
spanString.setSpan(new StyleSpan(Typeface.BOLD), 0, spanString.length(), 0);
spanString.setSpan(new StyleSpan(Typeface.ITALIC), 0, spanString.length(), 0);
text.setText(spanString);

SORTIE

enter image description here

349
Andro Selva

Ou juste comme ça à Kotlin:

val tv = findViewById(R.id.textViewOne) as TextView
tv.setTypeface(null, Typeface.BOLD_ITALIC)
// OR
tv.setTypeface(null, Typeface.BOLD or Typeface.ITALIC)
// OR
tv.setTypeface(null, Typeface.BOLD)
// OR
tv.setTypeface(null, Typeface.ITALIC)
// AND
tv.paintFlags = tv.paintFlags or Paint.UNDERLINE_TEXT_FLAG

Ou en Java:

TextView tv = (TextView)findViewById(R.id.textViewOne);
tv.setTypeface(null, Typeface.BOLD_ITALIC);
// OR
tv.setTypeface(null, Typeface.BOLD|Typeface.ITALIC);
// OR
tv.setTypeface(null, Typeface.BOLD);
// OR
tv.setTypeface(null, Typeface.ITALIC);
// AND
tv.setPaintFlags(tv.getPaintFlags()|Paint.UNDERLINE_TEXT_FLAG);

Restez simple et en une ligne :)

133
h0ussni

En gras et en italique, ce que vous faites est correct pour le soulignement, utilisez le code suivant

HelloAndroid.Java

 package com.example.helloandroid;

 import Android.app.Activity;
 import Android.os.Bundle;
 import Android.text.SpannableString;
 import Android.text.style.UnderlineSpan;
import Android.widget.TextView;

public class HelloAndroid extends Activity {
TextView textview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    textview = (TextView)findViewById(R.id.textview);
    SpannableString content = new SpannableString(getText(R.string.hello));
    content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
    textview.setText(content);
}
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/textview"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:text="@string/hello"
Android:textStyle="bold|italic"/>

string.xml

<?xml version="1.0" encoding="utf-8"?>
 <resources>
  <string name="hello">Hello World, HelloAndroid!</string>
  <string name="app_name">Hello, Android</string>
</resources>
74
Vivek

C'est un moyen facile d'ajouter un soulignement tout en conservant d'autres paramètres:

textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
46
sonida

Programmation:

Vous pouvez faire par programme en utilisant la méthode setTypeface ():

Ci-dessous le code pour la police de caractères par défaut

textView.setTypeface(null, Typeface.NORMAL);      // for Normal Text
textView.setTypeface(null, Typeface.BOLD);        // for Bold only
textView.setTypeface(null, Typeface.ITALIC);      // for Italic
textView.setTypeface(null, Typeface.BOLD_ITALIC); // for Bold and Italic

et si vous souhaitez définir une police de caractères personnalisée:

textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);      // for Normal Text
textView.setTypeface(textView.getTypeface(), Typeface.BOLD);        // for Bold only
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);      // for Italic
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC); // for Bold and Italic

XML:

Vous pouvez définir directement dans un fichier XML comme suit:

Android:textStyle="normal"
Android:textStyle="normal|bold"
Android:textStyle="normal|italic"
Android:textStyle="bold"
Android:textStyle="bold|italic"
35
King of Masses

Sans guillemets fonctionne pour moi:

<item name="Android:textStyle">bold|italic</item>
20
Lotfi

Si vous lisez ce texte à partir d'un fichier ou du réseau.

Vous pouvez y arriver en ajoutant des balises HTML à votre texte comme mentionné

This text is <i>italic</i> and <b>bold</b>
and <u>underlined</u> <b><i><u>bolditalicunderlined</u></b></i>

et vous pouvez ensuite utiliser la classe HTML qui traite les chaînes HTML en texte stylé affichable.

// textString is the String after you retrieve it from the file
textView.setText(Html.fromHtml(textString));
20
Ahmed Hegazy
    style="?android:attr/listSeparatorTextViewStyle
  • en faisant ce style, vous pouvez réaliser le soulignement
5
dreamdeveloper