Wie kann ich den Schriftstil in einer Android TextView fett, kursiv und unterstrichen einstellen?

450

Ich möchte den TextViewInhalt von a fett, kursiv und unterstrichen machen. Ich habe den folgenden Code ausprobiert und er funktioniert, unterstreicht ihn jedoch nicht.

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

Wie mache ich es? Irgendwelche schnellen Ideen?

D-Mann
quelle
funktioniert es, nur einen von ihnen einzustellen?
Falstro
Ja, es funktioniert gut. Ich möchte es auch unter die Lupe nehmen.
D-Mann
6
textView.setPaintFlags (Paint.UNDERLINE_TEXT_FLAG);
bCliks
15
tv.setTypeface(null, Typeface.BOLD_ITALIC);
3
4 Möglichkeiten, Android TextView fett zu machen Ich denke, Sie sollten diesen Artikel lesen.
c49

Antworten:

279

Ich weiß nichts über Unterstreichen, aber für fett und kursiv gibt es "bolditalic". Unterstrichen wird hier nicht erwähnt: http://developer.android.com/reference/android/widget/TextView.html#attr_android:textStyle

Wohlgemerkt, um das erwähnte zu verwenden bolditalic, müssen Sie, und ich zitiere von dieser Seite

Muss einer oder mehrere (durch '|' getrennt) der folgenden konstanten Werte sein.

also würdest du verwenden bold|italic

Sie können diese Frage auf Unterstreichung überprüfen: Kann ich Text in einem Android-Layout unterstreichen?

Nanne
quelle
48
für unter Zeile .. textView.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
bCliks
1
@bala Beachten Sie, dass Ihre Lösung immer den gesamten Text unterstreicht, sodass dies nicht möglich ist, wenn Sie nur einen Teil davon unterstreichen möchten.
Giulio Piancastelli
361

Dies sollte Ihre Textansicht gleichzeitig fett , unterstrichen und kursiv machen .

string.xml

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

Führen Sie dies in Ihrer main.xml aus , um diese Zeichenfolge auf Ihre Textansicht festzulegen

<?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" />

oder In JAVA ,

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

Manchmal ist der oben beschriebene Ansatz nicht hilfreich, wenn Sie möglicherweise dynamischen Text verwenden müssen. In diesem Fall wird SpannableString aktiviert .

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);

AUSGABE

Geben Sie hier die Bildbeschreibung ein

Andro Selva
quelle
3
Ich habe es in 2.1 überprüft. Zumindest sollte es ab 2.1 und höher funktionieren
Andro Selva
Kann in Betracht ziehen,new StyleSpan(Typeface.BOLD_ITALIC)
Cheok Yan Cheng
Warum funktioniert es nicht mit dynamischen verketteten Zeichenfolgen? Es ist verkabelt, dass einige Zahlen erschienen sind ...
AuBee
152

Oder einfach so in 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

Oder in 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);

Halte es einfach und in einer Zeile :)


quelle
1
Durch Einfügen des Pakets kotlinx.android.synthetic für die Ansicht, mit der Sie arbeiten, ist die findViewByID in Kotlin nicht erforderlich, sodass jede der setTypeface-Zeilen: textViewOne.setTypeface (...)
cren90
ist paintFlagsnotwendig? Es funktioniert ohne das
Prabs
75

Für Fett und Kursiv ist alles, was Sie tun, für den Unterstrich korrekt. Verwenden Sie den folgenden Code

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>
Vivek
quelle
Um den underlinePass-Null-Wert anstelle des new UnderlineSpan()folgenden zu entfernencontent.setSpan(null, 0, content.length(), 0);
Sami Eltamawy
47

Dies ist eine einfache Möglichkeit, eine Unterstreichung hinzuzufügen, während andere Einstellungen beibehalten werden:

textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Sonida
quelle
Beachten Sie, dass diese Lösung immer den gesamten Text unterstreicht, sodass dies nicht möglich ist, wenn nur ein Teil davon hervorgehoben werden soll.
Giulio Piancastelli
42

Programmatik:

Sie können dies programmgesteuert mit der setTypeface () -Methode tun:

Unten finden Sie den Code für die Standardschrift

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

und wenn Sie eine benutzerdefinierte Schriftart festlegen möchten:

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:

Sie können direkt in einer XML-Datei Folgendes festlegen:

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"
König der Massen
quelle
Wie kann ich die Schriftfamilie mit setTypeface ändern und auch fett, kursiv und unterstrichen anwenden?
Prinz
@ DPrince hier ansehen stackoverflow.com/questions/12128331/…
König der Massen
23

Wenn Sie diesen Text aus einer Datei oder aus dem Netzwerk lesen.

Sie können dies erreichen, indem Sie Ihrem Text wie erwähnt HTML-Tags hinzufügen

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

Anschließend können Sie die HTML- Klasse verwenden, die HTML-Zeichenfolgen zu anzeigbarem Text verarbeitet.

// textString is the String after you retrieve it from the file
textView.setText(Html.fromHtml(textString));
Ahmed Hegazy
quelle
fromHtml (String) -Methode wurde in API-Level 24 veraltet. Weitere Diskussion hier: stackoverflow.com/questions/37904739/…
Pavel Biryukov
20

Ohne Anführungszeichen funktioniert bei mir:

<item name="android:textStyle">bold|italic</item>
Lotfi
quelle
5
    style="?android:attr/listSeparatorTextViewStyle
  • Durch diesen Stil können Sie eine Unterstreichung erzielen
Traumentwickler
quelle
4

Nur eine Codezeile in XML

        android:textStyle="italic"
Boris Ruzanov
quelle
3

Sie können es leicht erreichen, indem Sie Kotlins buildSpannedString{}unter seiner core-ktxAbhängigkeit verwenden.

val formattedString = buildSpannedString {
    append("Regular")
    bold { append("Bold") }
    italic { append("Italic") }
    underline { append("Underline") }
    bold { italic {append("Bold Italic")} }
}

textView.text = formattedString
Morgan Koh
quelle
Dies sollte die akzeptierte Antwort 100% sein
sachadso