Como definir o TextStyle do TextView, como negrito, itálico

843

Como definir TextView estilo (negrito ou itálico) em Java e sem usar o layout XML?

Em outras palavras, eu preciso escrever android:textStylecom Java.

Apenas eu
fonte

Respostas:

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

Para manter o tipo de letra anterior

textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)
Tanmay Mandal
fonte
5
Para remover o estilo pode ser usado Typeface.NORMAL
Brais Gabin
351
Se você fizer isso, perderá qualquer tipo de letra anterior. Para manter o anterior, faça algo como textView.setTypeface (textView.getTypeface (), Typeface.BOLD_ITALIC);
leocadiotina
34
textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);não removerá o estilo em negrito ou itálico de a TextView. Você precisará usar textView.setTypeface(null, Typeface.NORMAL);para isso.
Jarett Millard
58
Para manter qualquer tipo de letra anterior, mas para se livrar de estilo negrito ou itálico, use o seguinte código:textView.setTypeface(Typeface.create(textView.getTypeface(), Typeface.NORMAL), Typeface.NORMAL);
Shnkc
6
Obrigado @Shnkc, você me indicou a direção certa. Na verdade, você só precisa de: textView.setTypeface (Typeface.create (textView.getTypeface (), Typeface.NORMAL));
PedroHidalgo
271

Tente fazer isso TextViewpara negrito ou itálico

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);
Niranj Patel
fonte
14
Aliás, se você deseja limpar um estilo de fonte existente, precisará fazer algo diferente, por exemplo:tv.setTypeface(Typeface.create(tv.getTypeface(), Typeface.NORMAL));
greg7gkb
@ greg7gkb tv.setTypeface(null, Typeface.BOLD);isso não fará o mesmo (limpar um estilo de fonte existente)?
Prabs
Passar nulo para setTypeface () significa que o TextView usa um padrão embutido que pode ser diferente do tipo de letra definido anteriormente.
Greg7gkb
142

Programaticamente:

Você pode fazer programaticamente usando 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:

Você pode definir diretamente no arquivo XML <TextView />como:

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"
Pratik Butani
fonte
11
Questionador perguntou como fazê-lo sem usar o layout XML.
perfil completo de JulianSymes
6
Check Question with in Java and without using XMLBy the way Isso também ajudará os outros.
Pratik Butani
5
Sim. Eu vim aqui via Google e isso me ajudou. Obrigado :)
Atul
96

Você tem duas opções:

Opção 1 (funciona apenas em negrito, itálico e sublinhado):

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

Opção 2:

Use um Spannable ; é mais complicado, mas você pode modificar dinamicamente os atributos de texto (não apenas negrito / itálico, também cores).

Gabriel Negut
fonte
6
Com typeFacevocê pode definir um estilo único para todo o texto.
Gabriel Negut 08/08/13
2
quando estou tentando na minha linha personalizada não está entendendo o porquê? String s1 = "<b> Você está em: </b>"; holder.address = (TextView) convertView.findViewById (R.id.address_text_view); holder.address.setText (Html.fromHtml (s1) + track.getAddress ());
Shylendra Madda
2
Esse método é um ótimo estilo de texto parcial. Como uma citação dentro de uma grande exibição de texto.
Salih Erikci
1
O primeiro método não funciona no meu caso private void createTextView (título da string, texto da string) {textView = new TextView (this); textView.setTextSize (17); textView.setText (Html.fromHtml ("<b>" + título + "</b>") + ":" + texto); }
garenyondem 23/01
1
As opções spannable e fromHTML podem diminuir a digitação / setText se o texto for grande devido a recálculos de layout. Evite-o se você tiver outros métodos disponíveis.
Eugene Kartoyev 29/10
43

Programaticamente:

Você pode fazer programaticamente usando o setTypeface()método:

Abaixo está o código para o Tipo de letra padrão

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

e se você deseja definir um tipo de letra personalizado :

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:

Você pode definir diretamente no arquivo XML da <TextView />seguinte maneira:

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

Ou você pode definir sua fonte de favoritos (dos ativos). para mais informações veja o link

akshay
fonte
14
TextView text = (TextView)findViewById(R.id.THE_TEXTVIEW_ID);

agora defina as textviewpropriedades ..

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
fonte
11

Simplesmente se você quiser deixar o texto em negrito . escreva esta linha no seu layout na propriedade de exibição de texto

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

Seria

yourTextView.setTypeface(null,Typeface.DEFAULT_BOLD);

e itálico deve poder substituir Typeface.DEFAULT_BOLDcom Typeface.DEFAULT_ITALC.

Deixe-me saber como isso funciona.

DustinRiley
fonte
10

tente isso para definir seu TextView estilo por código java

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

Tente o seguinte:

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

Tente o seguinte:

TextView textview = (TextView)findViewById(R.id.textview_idname);
textview.setTypeface(null,Typeface.BOLD);
Sombra negra
fonte
4

A maneira padrão de fazer isso é usar os estilos personalizados. Ex-

Em styles.xmlacrescentar o seguinte.

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

Aplique esse estilo ao seu da TextViewseguinte maneira.

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

Uma maneira de fazer isso é:

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

Outra opção, se você deseja manter o tipo de letra anterior e não deseja perder a aplicação anterior, então:

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
fonte
4
textView.setTypeface(null, Typeface.BOLD_ITALIC);
textView.setTypeface(null, Typeface.BOLD);
textView.setTypeface(null, Typeface.ITALIC);
textView.setTypeface(null, Typeface.NORMAL);

Para manter o tipo de letra anterior

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

Você pode tentar assim:

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

A maneira mais fácil de fazer com base nos critérios de seleção de estilo é:

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
fonte
2

Como eu quero usar uma fonte personalizada, apenas uma conjunção de várias respostas funciona para mim. Obviamente, as configurações no meu layout.xmlgosto android:textStlyle="italic"foram ignoradas pelo AOS. Então, finalmente, tive que fazer o seguinte: na strings.xmlcadeia de destino foi declarada como:

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

adicionalmente no código:

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

Eu não tentei a Spannableopção (que eu assumo que DEVE funcionar), mas

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

não teve efeito. Além disso, se eu remover o italic tagde strings.xmldeixar setTypeface()tudo sozinho, também não terá efeito. Android complicado ...

Stan
fonte
2

E, como explicado aqui Recursos de sequência de desenvolvedores do Android, se você precisar usar parâmetros em seu recurso de texto com estilo, precisará escapar dos colchetes de abertura

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

e chame formatHtml (string)

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

No meu caso:

1 - definir texto

2 - definir tipo de letra

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

Essa é a única coisa que funcionou para mim no OnePlus 5T configurado com a fonte OnePlus Slate ™:

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

Outros métodos fazem com que ele volte ao Roboto quando BOLD ou NORMAL.

droid256
fonte
1

Ao usar tags simplificadas com AndroidX, considere usar 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
fonte
0

A melhor maneira é defini-lo em 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>

E atualize-o em 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
fonte
0
AppCompatTextView text =(AppCompatTextView)findViewById(R.layout.appCompatTextView1);
text.setTypeface(null,Typeface.BOLD);

Use o método acima para definir o tipo de letra programaticamente.

Tulsi
fonte
0

1) Você pode configurá-lo com TypeFace. 2) Você pode usar diretamente em strings.xml (na sua pasta de valores) 3) Você pode String myNewString = "Este é o meu texto em negrito Esta é a minha string em itálico Esta é a minha string sublinhada

Ujjwal Bassi
fonte
0

Você pode definir o tipo de letra diferente usando o exemplo abaixo -

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

Ou se você deseja definir uma fonte diferente e seu tipo de letra. Adicione-o ao ativo ou à pasta bruta e use-o como

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

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