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?


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?


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


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


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>

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

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"

Wie kann ich die Schriftfamilie mit setTypeface ändern und auch fett, kursiv und unterstrichen anwenden?
Prinz


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

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>

5
    style="?android:attr/listSeparatorTextViewStyle
  • Durch diesen Stil können Sie eine Unterstreichung erzielen


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

Dies sollte die akzeptierte Antwort 100% sein
sachadso
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.