Jak ustawić TextView TextStyle, takie jak pogrubienie, kursywa

843

Jak ustawić TextViewstyl (pogrubiony lub kursywą) w Javie i bez użycia układu XML?

Innymi słowy, muszę pisać android:textStylew Javie.

Tylko ja
źródło

Odpowiedzi:

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

Aby zachować poprzedni krój pisma

textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)
Tanmay Mandal
źródło
5
Aby usunąć styl, można użyć kroju pisma. NORMALNY
Brais Gabin
351
Jeśli to zrobisz, stracisz poprzedni krój. Aby zachować poprzednią, zrób coś takiego jak textView.setTypeface (textView.getTypeface (), Typeface.BOLD_ITALIC);
leokadiotyna
34
textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);nie usunie pogrubionej lub pochylonej stylizacji z TextView. Musisz do tego użyć textView.setTypeface(null, Typeface.NORMAL);.
Jarett Millard,
57
Aby zachować poprzedni krój pisma, ale aby pozbyć się pogrubionego lub pochylonego stylu, użyj następującego kodu:textView.setTypeface(Typeface.create(textView.getTypeface(), Typeface.NORMAL), Typeface.NORMAL);
Shnkc
6
Dzięki @Shnkc, wskazałeś mi właściwy kierunek. Właściwie potrzebujesz tylko: textView.setTypeface (Typeface.create (textView.getTypeface (), Typeface.NORMAL));
PedroHidalgo
271

Spróbuj tego ustawić na TextViewpogrubienie lub kursywę

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);
Niranj Patel
źródło
14
Nawiasem mówiąc, jeśli chcesz wyczyścić istniejący styl kroju, musisz zrobić coś innego, np .:tv.setTypeface(Typeface.create(tv.getTypeface(), Typeface.NORMAL));
greg7gkb
@ greg7gkb tv.setTypeface(null, Typeface.BOLD);nie zrobi tego samego (wyczyści istniejący styl kroju pisma)?
Prabs
Przekazywanie null do setTypeface () oznacza, że ​​TextView używa zakodowanego domyślnego ustawienia domyślnego, które może różnić się od wcześniej ustawionego kroju pisma.
greg7gkb
142

Programowo:

Możesz to zrobić programowo, używając 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:

Możesz ustawić Bezpośrednio w pliku XML w następujący sposób <TextView />:

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"
Pratik Butani
źródło
11
Pytający zapytał, jak to zrobić bez użycia układu XML.
JulianSymes,
6
Sprawdź pytanie with in Java and without using XMLPrzy okazji Pomoże to również innym.
Pratik Butani
5
Tak. Przybyłem tutaj przez Google i to mi tylko pomogło. Dzięki :)
Atul
96

Masz dwie opcje:

Opcja 1 (działa tylko dla pogrubienia, kursywy i podkreślenia):

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

Opcja 2:

Użyj Spannable ; jest to bardziej skomplikowane, ale możesz dynamicznie modyfikować atrybuty tekstu (nie tylko pogrubienie / kursywa, ale także kolory).

Gabriel Negut
źródło
6
Za pomocą typeFacemożesz ustawić jeden styl dla całego tekstu.
Gabriel Negut
2
kiedy próbuję w moim niestandardowym rzędzie, nie rozumiem, dlaczego? String s1 = "<b> Jesteś na: </b>"; holder.address = (TextView) convertView.findViewById (R.id.address_text_view); holder.address.setText (Html.fromHtml (s1) + track.getAddress ());
Shylendra Madda
2
Ta metoda jest świetnym częściowym stylem tekstu. Jak cytat w dużym widoku tekstu.
Salih Erikci
1
Pierwsza metoda nie działa w moim przypadku private void createTextView (tytuł napisu, tekst napisu) {textView = new TextView (this); textView.setTextSize (17); textView.setText (Html.fromHtml („<b>” + tytuł + „</b>”) + „:” + tekst); }
garenyondem
1
Opcje spannble i fromHTML mogą spowolnić pisanie / setText, jeśli tekst jest duży z powodu ponownych obliczeń układu. Unikaj tego, jeśli masz inne metody.
Eugene Kartoyev
42

Programowo:

Możesz to zrobić programowo przy użyciu setTypeface()metody:

Poniżej znajduje się kod domyślnego kroju pisma

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

a jeśli chcesz ustawić niestandardowy krój pisma :

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:

Możesz ustawić bezpośrednio w pliku XML w <TextView />następujący sposób:

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

Lub możesz ustawić swoją ulubioną czcionkę (z zasobów). Aby uzyskać więcej informacji, patrz link

akshay
źródło
14
TextView text = (TextView)findViewById(R.id.THE_TEXTVIEW_ID);

teraz ustaw textviewwłaściwości

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
źródło
11

Po prostu, jeśli chcesz pogrubić tekst . napisz ten wiersz w swoim układzie we właściwości widoku tekstu

android:textStyle="bold"
Charu ක
źródło
10
TextView text = (TextView)findViewById(R.layout.textName);
text.setTypeface(null,Typeface.BOLD);
Khushi
źródło
10

To byłby

yourTextView.setTypeface(null,Typeface.DEFAULT_BOLD);

i kursywą powinno być możliwe zastąpienie Typeface.DEFAULT_BOLDprzez Typeface.DEFAULT_ITALC.

Daj mi znać, jak to działa.

DustinRiley
źródło
10

spróbuj tego, aby ustawić swój TextView styl według kodu Java

txt1.setTypeface(null,Typeface.BOLD_ITALIC);
Nikhil
źródło
7

Spróbuj tego:

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);
mohamad sheikhi
źródło
6

Spróbuj tego:

TextView textview = (TextView)findViewById(R.id.textview_idname);
textview.setTypeface(null,Typeface.BOLD);
Czarny cień
źródło
4

Standardowym sposobem na to jest użycie niestandardowych stylów. Dawny-

Na styles.xmldodatek, co następuje.

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

Zastosuj ten styl do swojego TextVieww następujący sposób.

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@style/MyApp.TextAppearance.LoginText" />
Shivanand Darur
źródło
4

Jednym ze sposobów jest:

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

Inna opcja, jeśli chcesz zachować poprzedni krój pisma i nie chcesz stracić wcześniej zastosowanego kroju, to:

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
źródło
4
textView.setTypeface(null, Typeface.BOLD_ITALIC);
textView.setTypeface(null, Typeface.BOLD);
textView.setTypeface(null, Typeface.ITALIC);
textView.setTypeface(null, Typeface.NORMAL);

Aby zachować poprzedni krój pisma

textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)
Amirhf
źródło
3

Możesz spróbować w ten sposób:

<string name="title"><u><b><i>Your Text</i></b></u></string>
Vishal Vaishnav
źródło
3

Najłatwiejszym sposobem na podstawie kryteriów wyboru stylu jest:

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
źródło
2

Ponieważ chcę użyć niestandardowej czcionki, działa tylko kombinacja kilku odpowiedzi. Oczywiście ustawienia w moim layout.xmlLike android:textStlyle="italic"został zignorowany przez AOS. W końcu musiałem wykonać następujące czynności: w strings.xmlciągu docelowym zadeklarowano jako:

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

następnie dodatkowo w kodzie:

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

Nie wypróbowałem tej Spannableopcji (zakładam, że MUSI działać), ale

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

nie miało wpływu. Również jeśli usunę italic tagz strings.xmlpozostawiania w setTypeface()spokoju, nie będzie to miało również żadnego efektu. Podstępny Android ...

Stan
źródło
2

I jak wyjaśniono tutaj, deweloperzy Androida Zasoby ciągów, jeśli chcesz użyć parametrów w zasobach tekstowych w stylu, musisz uciec od nawiasów otwierających

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

i wywołanie formatu HTML (ciąg)

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
CharSequence styledText = Html.fromHtml(text);
Angelo Nodari
źródło
2

W moim przypadku:

1 - ustaw tekst

2 - ustaw krój pisma

holder.title.setText(item.nome);
holder.title.setTypeface(null, Typeface.BOLD);
FlipNovid
źródło
1

To jedyna rzecz, która działała dla mnie w OnePlus 5T skonfigurowanym z czcionką OnePlus Slate ™:

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

Inne metody sprawiłyby, że wróciłby do Roboto, gdy BOLD lub NORMAL.

droid256
źródło
1

Korzystając z uproszczonych tagów w systemie AndroidX, rozważ użycie HtmlCompat.fromHtml ()

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
źródło
0

Najlepszym sposobem jest zdefiniowanie tego w 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>

I zaktualizuj to w 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
źródło
0
AppCompatTextView text =(AppCompatTextView)findViewById(R.layout.appCompatTextView1);
text.setTypeface(null,Typeface.BOLD);

Użyj powyższej metody, aby programowo ustawić krój pisma.

Tulsi
źródło
0

1) Możesz ustawić za pomocą TypeFace. 2) Możesz użyć bezpośrednio w strings.xml (w folderze wartości) 3) Możesz napisać myNewString = "To jest mój pogrubiony tekst To jest mój ciąg kursywy To jest mój podkreślony ciąg

Ujjwal Bassi
źródło
0

Możesz ustawić inny krój pisma, korzystając z przykładu podanego poniżej -

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

Lub jeśli chcesz ustawić inną czcionkę i jej krój pisma. Dodaj go do zasobu lub folderu RAW, a następnie użyj go jak

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

  Typeface face1= Typeface.createFromAsset(getAssets(), "font/font1.ttf");
  tv2.setTypeface(face1);
Ravi
źródło