Як встановити TextView textStyle, такий як напівжирний, курсивний


843

Як встановити TextViewстиль (жирний або курсив) в Java та без використання макета XML?

Іншими словами, мені потрібно писати android:textStyleз Java.

Відповіді:


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

Щоб зберегти попередній шрифт

textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)

5
Для видалення стилю можна використовувати Typeface.NORMAL
Brais Gabin

351
Якщо ви це зробите, ви втратите будь-який попередній шрифт. Щоб зберегти попередній, зробіть щось на зразок textView.setTypeface (textView.getTypeface (), Typeface.BOLD_ITALIC);
леокадіотін

34
textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);не видалить жирну або курсивну укладку з а TextView. Для цього вам потрібно буде скористатися textView.setTypeface(null, Typeface.NORMAL);.
Jarett Millard

57
Щоб зберегти будь-який попередній шрифт, але позбутися жирного або курсивного стилю, використовуйте наступний код:textView.setTypeface(Typeface.create(textView.getTypeface(), Typeface.NORMAL), Typeface.NORMAL);
Shnkc

6
Дякую @Shnkc, ти вказав мене в правильному напрямку. Насправді вам просто потрібно: textView.setTypeface (Typeface.create (textView.getTypeface (), Typeface.NORMAL));
PedroHidalgo

271

Спробуйте це ввімкнути TextViewжирним або курсивом

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

14
До речі, якщо ви хочете очистити існуючий стиль шрифту, вам потрібно буде зробити щось інше, наприклад:tv.setTypeface(Typeface.create(tv.getTypeface(), Typeface.NORMAL));
greg7gkb

@ greg7gkb tv.setTypeface(null, Typeface.BOLD);це не зробить те саме (очистіть існуючий стиль шрифту)?
Прабс

Передача нуля в setTypeface () означає, що TextView використовує жорстко закодований за замовчуванням, який може відрізнятися від раніше встановленого Typeface.
greg7gkb

142

Програмно:

Ви можете це робити програмно, використовуючи 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:

Ви можете встановити безпосередньо в XML-файл у <TextView />вигляді:

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

11
Запитуючий запитав, як це зробити без використання макета XML.
JulianSymes

6
Перевірте питання with in Java and without using XMLДо речі, це допоможе і іншим.
Пратік Бутані

5
Так. Я прийшов сюди через Google, і це мені просто допомогло. Дякую :)
Атул

96

У вас є два варіанти:

Варіант 1 (працює лише для жирних, курсивних та підкреслених):

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

Варіант 2:

Використовуйте Spannable ; це складніше, але ви можете динамічно змінювати текстові атрибути (не лише жирний / курсивний, а також кольори).


6
За допомогою нього typeFaceможна встановити єдиний стиль для всього тексту.
Габріель Негут

2
коли я намагаюся в своєму користувальницькому рядку його не отримувати, чому? Рядок s1 = "<b> Ви знаходитесь в: </b>"; hold.address = (TextView) convertView.findViewById (R.id.address_text_view); hold.address.setText (Html.fromHtml (s1) + track.getAddress ());
Шилендра Мадда

2
Цей метод чудовий для часткового стилювання тексту. Як цитата всередині великого перегляду тексту.
Саліх Ерікчі

1
Перший метод не працює в моєму випадку private void createTextView (String title, String text) {textView = new TextView (це); textView.setTextSize (17); textView.setText (Html.fromHtml ("<b>" + назва + "</b>") + ":" + текст); }
garenyondem

1
Параметри, що розгортаються та з HTML, можуть уповільнити введення / setText, якщо текст великий через перерахунок макета. Уникайте цього, якщо у вас є інші методи.
Євген Картоєв

42

Програмно:

Можна робити програмно setTypeface()методом:

Нижче наведено код за замовчуванням Typeface

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

і якщо ви хочете встановити спеціальний шрифт :

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:

Ви можете встановити безпосередньо у XML-файл <TextView />таким чином:

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

Або ви можете встановити свій fav шрифт (з активів). Детальніше див. за посиланням


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

тепер встановіть textviewвластивості ..

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

11

Просто, якщо ви хочете зробити текст жирним . запишіть цей рядок у своєму макеті у властивості перегляду тексту

android:textStyle="bold"

10
TextView text = (TextView)findViewById(R.layout.textName);
text.setTypeface(null,Typeface.BOLD);

10

Це було б

yourTextView.setTypeface(null,Typeface.DEFAULT_BOLD);

і курсив повинен мати можливість заміни Typeface.DEFAULT_BOLDна Typeface.DEFAULT_ITALC.

Дайте мені знати, як це працює.


10

спробуйте це встановити TextView стиль за кодом Java

txt1.setTypeface(null,Typeface.BOLD_ITALIC);


7

Спробуйте це:

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

6

Спробуйте це:

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

4

Стандартний спосіб зробити це - використовувати власні стилі. Ex-

В styles.xmlдодати наступне.

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

Застосуйте цей стиль до свого TextViewнаступним чином.

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

4

Один із способів зробити це:

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

Ще один варіант, якщо ви хочете зберегти попередній шрифт і не хочете втрачати раніше застосований:

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

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

Щоб зберегти попередній шрифт

textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)


3

Найпростіший спосіб зробити на основі критеріїв вибору стилю:

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

2

Оскільки я хочу використовувати нестандартний шрифт, для мене працює лише сполучення декількох відповідей. Очевидно, що налаштування на layout.xmlзразок моїх android:textStlyle="italic"AOS проігнорували. Отже, нарешті, я повинен був зробити наступне: у strings.xmlцільовому рядку було оголошено як:

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

потім додатково в коді:

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

Я не пробував Spannableваріант (який, я вважаю, ОБОВ'ЯЗКОВО працювати), але

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

не мали ефекту. Крім того, якщо я видалити italic tagз strings.xmlзалишаючи setTypeface()все в поодинці це не має ніякого ефекту або. Хитрий Android ...


2

І як пояснено тут, String Resources для розробників Android, якщо вам потрібно використовувати параметри у своєму стильовому текстовому ресурсі, ви повинні уникати початкових дужок

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

та формат викликуHtml (рядок)

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

2

У моєму випадку:

1 - встановити текст

2 - встановити шрифт

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

1

Це єдине, що працювало для мене на OnePlus 5T, налаштованому шрифтом OnePlus Slate ™:

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

Інші методи змусять його повернутися до Roboto, коли це BOLD або NORMAL.


1

Під час використання спрощених тегів з AndroidX, розгляньте можливість використання 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));

0

Найкращий спосіб це визначити в 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>

І оновити його в 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" />

0
AppCompatTextView text =(AppCompatTextView)findViewById(R.layout.appCompatTextView1);
text.setTypeface(null,Typeface.BOLD);

Використовуйте вищевказаний метод для програмного встановлення шрифту.


0

1) Ви можете встановити його за допомогою TypeFace. 2) Ви можете безпосередньо використовувати у strings.xml (у папці зі значеннями) 3) Ви можете String myNewString = "Це мій жирний текст Це мій рядок курсивом. Це моя підкреслена рядок


0

Ви можете встановити інший шрифт за допомогою наведеного нижче прикладу -

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

Або якщо ви хочете встановити інший шрифт та його шрифт. Додайте його до активу чи сирої папки, а потім використовуйте як

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

  Typeface face1= Typeface.createFromAsset(getAssets(), "font/font1.ttf");
  tv2.setTypeface(face1);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.