So legen Sie TextView textStyle fest, z. B. fett, kursiv

843

Wie kann man den TextViewStil (fett oder kursiv) in Java und ohne Verwendung des XML-Layouts festlegen ?

Mit anderen Worten, ich muss android:textStylemit Java schreiben .

Nur ich
quelle

Antworten:

1885
textView.setTypeface(null, Typeface.BOLD_ITALIC);
textView.setTypeface(null, Typeface.BOLD);
textView.setTypeface(null, Typeface.ITALIC);
textView.setTypeface(null, Typeface.NORMAL);

So behalten Sie die vorherige Schrift bei

textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)
Tanmay Mandal
quelle
5
Um den Stil zu entfernen, kann Typeface.NORMAL
Brais Gabin
351
Wenn Sie dies tun, verlieren Sie alle vorherigen Schriften. Führen Sie zum Beibehalten des vorherigen Befehls Folgendes aus: textView.setTypeface (textView.getTypeface (), Typeface.BOLD_ITALIC);
Leocadiotin
34
textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);entfernt kein fett oder kursiv gestyltes Styling von a TextView. Sie müssen dafür verwenden textView.setTypeface(null, Typeface.NORMAL);.
Jarett Millard
57
Verwenden Sie den folgenden Code, um frühere Schriftarten textView.setTypeface(Typeface.create(textView.getTypeface(), Typeface.NORMAL), Typeface.NORMAL);
beizubehalten,
6
Danke @Shnkc, du hast mich in die richtige Richtung gelenkt. Eigentlich brauchen Sie nur: textView.setTypeface (Typeface.create (textView.getTypeface (), Typeface.NORMAL));
PedroHidalgo
271

Versuchen Sie dies, TextViewum Fett oder Kursiv zu setzen

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);
Niranj Patel
quelle
14
Übrigens, wenn Sie einen vorhandenen Schriftstil löschen möchten, müssen Sie etwas anderes tun, z. B.:tv.setTypeface(Typeface.create(tv.getTypeface(), Typeface.NORMAL));
greg7gkb
@ greg7gkb tv.setTypeface(null, Typeface.BOLD);wird dies nicht dasselbe tun (einen vorhandenen Schriftstil löschen)?
Prabs
Die Übergabe von null an setTypeface () bedeutet, dass die Textansicht eine fest codierte Standardeinstellung verwendet, die sich möglicherweise von der zuvor festgelegten Schriftart unterscheidet.
Greg7gkb
142

Programmatisch:

Sie können programmgesteuert Folgendes verwenden setTypeface():

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

XML:

Sie können direkt in einer XML-Datei Folgendes festlegen <TextView />:

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"
Pratik Butani
quelle
11
Der Fragesteller fragte, wie dies ohne Verwendung des XML-Layouts geschehen könne.
JulianSymes
6
Frage überprüfen with in Java and without using XMLÜbrigens Es wird auch anderen helfen.
Pratik Butani
5
Ja. Ich bin über Google hierher gekommen und es hat mir nur geholfen. Danke :)
Atul
96

Sie haben zwei Möglichkeiten:

Option 1 (funktioniert nur fett, kursiv und unterstrichen):

String s = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!"
TextView tv = (TextView)findViewById(R.id.THE_TEXTVIEW_ID);
tv.setText(Html.fromHtml(s));

Option 2:

Verwenden Sie ein Spannable ; Es ist komplizierter, aber Sie können die Textattribute dynamisch ändern (nicht nur fett / kursiv, sondern auch farbig).

Gabriel Negut
quelle
6
Mit können typeFaceSie einen einzelnen Stil für den gesamten Text festlegen.
Gabriel Negut
2
Wenn ich es in meiner benutzerdefinierten Zeile versuche, wird nicht verstanden, warum? String s1 = "<b> Sie befinden sich in: </ b>"; Inhaber.Adresse = (TextView) convertView.findViewById (R.id.address_text_view); holder.address.setText (Html.fromHtml (s1) + track.getAddress ());
Shylendra Madda
2
Diese Methode eignet sich hervorragend für die teilweise Textgestaltung. Wie ein Zitat in einer großen Textansicht.
Salih Erikci
1
Die erste Methode funktioniert in meinem Fall nicht. Private void createTextView (String title, String text) {textView = new TextView (this); textView.setTextSize (17); textView.setText (Html.fromHtml ("<b>" + title + "</ b>") + ":" + text); }
Garenyondem
1
Die Optionen spannable und fromHTML können die Eingabe von / setText verlangsamen, wenn der Text aufgrund von Layout-Neuberechnungen groß ist. Vermeiden Sie es, wenn Sie andere Methoden zur Verfügung haben.
Eugene Kartoyev
43

Programmatisch:

Sie können programmgesteuert Folgendes tun setTypeface():

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 der XML-Datei Folgendes festlegen <TextView />:

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"

Oder Sie können Ihre Lieblingsschriftart (aus Assets) festlegen. Weitere Informationen finden Sie unter Link

Akshay
quelle
14
TextView text = (TextView)findViewById(R.id.THE_TEXTVIEW_ID);

Jetzt legen Sie die textviewEigenschaften fest ..

text.setTypeface(null, Typeface.BOLD);  //-- for only bold the text
text.setTypeface(null, Typeface.BOLD_ITALIC);  //-- for  bold & italic the text
text.setTypeface(null, Typeface.ITALIC);  // -- for  italic the text
Akash Thakkar
quelle
11

Einfach, wenn Sie Text fett machen möchten . Schreiben Sie diese Zeile in Ihr Layout in der Eigenschaft Textansicht

android:textStyle="bold"
Charu ක
quelle
10
TextView text = (TextView)findViewById(R.layout.textName);
text.setTypeface(null,Typeface.BOLD);
Khushi
quelle
10

Es wäre

yourTextView.setTypeface(null,Typeface.DEFAULT_BOLD);

und kursiv sollte ersetzt sein können , Typeface.DEFAULT_BOLDmit Typeface.DEFAULT_ITALC.

Lassen Sie mich wissen, wie es funktioniert.

DustinRiley
quelle
10

Versuchen Sie dies, um Ihren TextView Stil durch Java-Code festzulegen

txt1.setTypeface(null,Typeface.BOLD_ITALIC);
Nikhil
quelle
7

Verwenden Sie textView.setTypeface(Typeface tf, int style);diese Option , um die Stileigenschaft von festzulegen TextView. Weitere Informationen finden Sie in der Entwicklerdokumentation .

Dinesh Sharma
quelle
7

Versuche dies:

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);
mohamad sheikhi
quelle
6

Versuche dies:

TextView textview = (TextView)findViewById(R.id.textview_idname);
textview.setTypeface(null,Typeface.BOLD);
Schwarzer Schatten
quelle
4

Die Standardmethode hierfür ist die Verwendung der benutzerdefinierten Stile. Ex-

In styles.xmlfügen Sie die folgende.

<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="MyApp.TextAppearance.LoginText">
    <item name="android:textStyle">bold|italic</item>
</style>

Wenden Sie diesen Stil TextViewwie folgt auf Ihren an.

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@style/MyApp.TextAppearance.LoginText" />
Shivanand Darur
quelle
4

Eine Möglichkeit ist:

myTextView.setTypeface(null, Typeface.ITALIC);
myTextView.setTypeface(null, Typeface.BOLD_ITALIC);
myTextView.setTypeface(null, Typeface.BOLD);
myTextView.setTypeface(null, Typeface.NORMAL);

Eine weitere Option, wenn Sie die vorherige Schrift beibehalten und die zuvor angewendete Schrift nicht verlieren möchten:

myTextView.setTypeface(textView.getTypeface(), Typeface.NORMAL);      
myTextView.setTypeface(textView.getTypeface(), Typeface.BOLD);        
myTextView.setTypeface(textView.getTypeface(), Typeface.ITALIC);      
myTextView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC); 
param
quelle
4
textView.setTypeface(null, Typeface.BOLD_ITALIC);
textView.setTypeface(null, Typeface.BOLD);
textView.setTypeface(null, Typeface.ITALIC);
textView.setTypeface(null, Typeface.NORMAL);

So behalten Sie die vorherige Schrift bei

textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)
Amirhf
quelle
3

Sie können Folgendes versuchen:

<string name="title"><u><b><i>Your Text</i></b></u></string>
Vishal Vaishnav
quelle
3

Der einfachste Weg, den Sie basierend auf den Stilauswahlkriterien machen können, ist:

String pre = "", post = "";

if(isBold){
    pre += "<b>"; post += "</b>";
}
if(isItalic){
    pre += "<i>"; post += "</i>";
}
if(isUnderline){
    pre += "<u>"; post += "</u>";
}

textView.setText(Html.fromHtml(pre + editText.getText().toString()+ post));
// you can also use it with EidtText
editText.setText(Html.fromHtml(pre + editText.getText().toString()+ post));
Muzamil
quelle
2

Da ich eine benutzerdefinierte Schriftart verwenden möchte, funktioniert für mich nur die Verbindung mehrerer Antworten. Offensichtlich wurden Einstellungen in meinem layout.xmlLike android:textStlyle="italic"von AOS ignoriert. Also musste ich endlich Folgendes tun: In strings.xmlder Zielzeichenfolge wurde deklariert als:

<string name="txt_sign"><i>The information blah blah ...</i></string>

dann zusätzlich im Code:

TextView textSign = (TextView) findViewById(R.id.txt_sign);
FontHelper.setSomeCustomFont(textSign);
textSign.setTypeface(textSign.getTypeface(), Typeface.ITALIC);

Ich habe die SpannableOption nicht ausprobiert (von der ich annehme, dass sie funktionieren muss), aber

textSign.setText(Html.fromHtml(getString(R.string.txt_sign))) 

hatte keine Wirkung. Auch wenn ich das italic tagaus dem strings.xmlAlleinlassen entferne setTypeface(), hat es auch keine Wirkung. Tricky Android ...

Stan
quelle
2

Und wie hier erläutert , müssen Sie die öffnenden Klammern umgehen, wenn Sie Parameter für Android Developers String Resources verwenden müssen, wenn Sie Parameter in Ihrer gestalteten Textressource verwenden müssen

<resources>
<string name="welcome_messages">Hello, %1$s! You have &lt;b>%2$d new messages&lt;/b>.</string>
</resources>

und rufe formatHtml (string) auf

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
CharSequence styledText = Html.fromHtml(text);
Angelo Nodari
quelle
2

In meinem Fall:

1 - Text einstellen

2 - Schriftart einstellen

holder.title.setText(item.nome);
holder.title.setTypeface(null, Typeface.BOLD);
FlipNovid
quelle
1

Dies ist das einzige, was bei einem OnePlus 5T funktioniert hat, der mit der OnePlus Slate ™ -Schrift konfiguriert ist:

textView.setTypeface(Typeface.create(textView.getTypeface(), useBold ? Typeface.BOLD : Typeface.NORMAL));

Andere Methoden würden dazu führen, dass Roboto entweder auf BOLD oder NORMAL zurückgreift.

droid256
quelle
1

Wenn Sie vereinfachte Tags mit AndroidX verwenden, sollten Sie HtmlCompat.fromHtml () verwenden.

String s = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!"    
TextView tv = (TextView)findViewById(R.id.THE_TEXTVIEW_ID);
tv.setText(HtmlCompat.fromHtml(s, FROM_HTML_MODE_LEGACY));
aleksandrbel
quelle
0

Der beste Weg ist, es in zu definieren styles.xml

<style name="common_txt_style_heading" parent="android:style/Widget.TextView">
        <item name="android:textSize">@dimen/common_txtsize_heading</item>
        <item name="android:textColor">@color/color_black</item>
        <item name="android:textStyle">bold|italic</item>
</style>

Und aktualisieren Sie es in TextView

  <TextView
     android:id="@+id/txt_userprofile"
     style="@style/common_txt_style_heading"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_centerHorizontal="true"
     android:layout_marginTop="@dimen/margin_small"
     android:text="@string/some_heading" />
Faheem
quelle
0
AppCompatTextView text =(AppCompatTextView)findViewById(R.layout.appCompatTextView1);
text.setTypeface(null,Typeface.BOLD);

Verwenden Sie die obige Methode, um die Schrift programmgesteuert festzulegen.

Tulsi
quelle
0

1) Sie können es mit TypeFace einstellen. 2) Sie können direkt in strings.xml (in Ihrem Werteordner) verwenden. 3) Sie können String myNewString = "Dies ist mein fett gedruckter Text. Dies ist mein kursiver String. Dies ist mein unterstrichener String

Ujjwal Bassi
quelle
0

Sie können die verschiedenen Schriftarten anhand des folgenden Beispiels einstellen -

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);

Oder wenn Sie eine andere Schriftart und deren Schriftart festlegen möchten. Fügen Sie es dem Asset oder Raw-Ordner hinzu und verwenden Sie es dann wie folgt

  Typeface face= Typeface.createFromAsset(getAssets(), "font/font.ttf");
  tv1.setTypeface(face);

  Typeface face1= Typeface.createFromAsset(getAssets(), "font/font1.ttf");
  tv2.setTypeface(face1);
Ravi
quelle