Полное руководство: стиль текста TextView в Java программно
Узнайте, как программно установить стиль текста TextView в Java — полное руководство с примерами кода, лучшими практиками и советами для разработки Android мобильных
Как можно задать TextView стиль текста полужирным или курсивным программно на Java, не используя XML‑файлы разметки?
Вы можете задать стиль текста TextView жирным или курсивом программно в Java, используя метод setTypeface() с соответствующими константами стиля. Наиболее распространённый способ:
textView.setTypeface(null, Typeface.BOLD); // жирный
textView.setTypeface(null, Typeface.ITALIC); // курсив
textView.setTypeface(null, Typeface.BOLD_ITALIC); // жирный + курсив
Этот метод работает полностью в коде и не требует изменений в XML‑разметке.
Содержание
- Базовые методы стилизации текста
- Сохранение текущего семейства шрифта
- Расширенная стилизация с
SpannableString - Полные примеры кода
- Распространённые проблемы и решения
Базовые методы стилизации текста
Самый простой способ задать стили программно – использовать setTypeface() с первым параметром null и вторым – нужной константой стиля.
Установка жирного текста
TextView textView = findViewById(R.id.myTextView);
textView.setTypeface(null, Typeface.BOLD);
Установка курсивного текста
TextView textView = findViewById(R.id.myTextView);
textView.setTypeface(null, Typeface.ITALIC);
Установка жирного и курсивного текста
TextView textView = findViewById(R.id.myTextView);
textView.setTypeface(null, Typeface.BOLD_ITALIC);
Возврат к обычному стилю
TextView textView = findViewById(R.id.myTextView);
textView.setTypeface(null, Typeface.NORMAL);
Эти методы сбрасывают шрифт до системного по умолчанию и применяют указанный стиль, как описано в обсуждениях Stack Overflow.
Сохранение текущего семейства шрифта
Если нужно оставить текущее семейство шрифта и изменить только стиль, используйте текущий Typeface в качестве первого параметра:
Добавление жирности к текущему шрифту
TextView textView = findViewById(R.id.myTextView);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
Добавление курсива к текущему шрифту
TextView textView = findViewById(R.id.myTextView);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
Добавление и жирности, и курсива
TextView textView = findViewById(R.id.myTextView);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);
Такой подход сохраняет любой пользовательский шрифт или существующее форматирование, что удобно при работе с кастомными шрифтами или когда не нужно сбрасывать шрифт к системному.
Расширенная стилизация с SpannableString
Для более сложных случаев, когда разные части текста требуют разных стилей, можно использовать SpannableString или buildSpannedString:
Использование SpannableString в Java
TextView textView = findViewById(R.id.myTextView);
SpannableString spannableString = new SpannableString("Regular Bold Italic BoldItalic");
spannableString.setSpan(new StyleSpan(Typeface.BOLD), 8, 12, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new StyleSpan(Typeface.ITALIC), 13, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 20, 31, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);
Использование buildSpannedString в Java (подход, похожий на Kotlin)
TextView textView = findViewById(R.id.myTextView);
SpannableStringBuilder spannableBuilder = new SpannableStringBuilder();
spannableBuilder.append("Regular ");
spannableBuilder.append("Bold");
spannableBuilder.setSpan(new StyleSpan(Typeface.BOLD), spannableBuilder.length() - 4, spannableBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableBuilder.append(" ");
spannableBuilder.append("Italic");
spannableBuilder.setSpan(new StyleSpan(Typeface.ITALIC), spannableBuilder.length() - 6, spannableBuilder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableBuilder);
Такой подход даёт тонкий контроль над стилизацией внутри одного TextView, позволяя применять разные стили к разным частям текста.
Полные примеры кода
Ниже приведены полные примеры, показывающие, как реализовать стилизацию текста в разных сценариях:
Пример 1: Базовая реализация в Activity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Создаём TextView программно
TextView textView = new TextView(this);
textView.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
textView.setText("This is programmatically styled text");
textView.setTextSize(18);
// Устанавливаем стили
textView.setTypeface(null, Typeface.BOLD); // жирный текст
// Добавляем в layout
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.addView(textView);
setContentView(layout);
}
}
Пример 2: Несколько стилей в одной Activity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(16, 16, 16, 16);
// TextView с жирным текстом
TextView boldText = new TextView(this);
boldText.setText("Bold Text");
boldText.setTextSize(16);
boldText.setTypeface(null, Typeface.BOLD);
// TextView с курсивом
TextView italicText = new TextView(this);
italicText.setText("Italic Text");
italicText.setTextSize(16);
italicText.setTypeface(null, Typeface.ITALIC);
// TextView с жирным и курсивом
TextView boldItalicText = new TextView(this);
boldItalicText.setText("Bold and Italic Text");
boldItalicText.setTextSize(16);
boldItalicText.setTypeface(null, Typeface.BOLD_ITALIC);
// TextView с обычным текстом
TextView normalText = new TextView(this);
normalText.setText("Normal Text");
normalText.setTextSize(16);
normalText.setTypeface(null, Typeface.NORMAL);
layout.addView(boldText);
layout.addView(italicText);
layout.addView(boldItalicText);
layout.addView(normalText);
setContentView(layout);
}
}
Распространённые проблемы и решения
Проблема: стиль текста не меняется
Если стиль текста не меняется, убедитесь, что setTypeface() вызывается после установки содержимого текста:
// Неправильный порядок – стиль может не примениться
textView.setText("Hello World");
textView.setTypeface(null, Typeface.BOLD);
// Правильный порядок
textView.setTypeface(null, Typeface.BOLD);
textView.setText("Hello World");
Проблема: потеря стиля при использовании кастомного шрифта
При работе с пользовательскими шрифтами убедитесь, что стиль применяется корректно:
// Загрузка кастомного шрифта
Typeface customFont = Typeface.createFromAsset(getAssets(), "fonts/custom_font.ttf");
// Применяем стиль, сохраняя кастомный шрифт
textView.setTypeface(customFont, Typeface.BOLD);
Проблема: производительность при большом количестве TextView
Для улучшения производительности при работе с множеством TextView создайте переиспользуемые методы стилизации:
public static void setTextViewStyle(TextView textView, int textStyle) {
textView.setTypeface(null, textStyle);
}
// Использование
setTextViewStyle(textView1, Typeface.BOLD);
setTextViewStyle(textView2, Typeface.ITALIC);
Проблема: динамическое изменение стиля
Чтобы менять стили динамически в зависимости от пользовательского взаимодействия:
button.setOnClickListener(v -> {
if (textView.getTypeface() != null &&
(textView.getTypeface().getStyle() & Typeface.BOLD) != 0) {
textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);
} else {
textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
}
});
Эти методы обеспечивают полный контроль над стилизацией TextView программно в Java без необходимости редактировать XML‑разметку. Главное – понять работу setTypeface() и его параметры, чтобы достичь нужного визуального эффекта.
Источники
- Stack Overflow – Как задать TextView textStyle, такой как bold, italic
- Repeato – Как задать TextView TextStyle программно в Android
- SemicolonWorld – Установить стиль TextView (жирный или курсив)
- Stack Overflow – Как задать стиль шрифта жирный, курсивный и подчёркнутый в Android TextView
- AndroidRide – 4 способа сделать Android TextView жирным
Заключение
Стилизовать TextView программно в Java можно легко, используя setTypeface() с нужными константами стиля. Ключевые подходы: setTypeface(null, style) для сброса шрифта к системному с применением стиля, либо setTypeface(textView.getTypeface(), style) для сохранения текущего шрифта и добавления стиля. Для более сложных требований SpannableString предоставляет тонкий контроль над разными частями текста. Главное – вызывать методы стилизации после установки текста и корректно обрабатывать пользовательские шрифты, чтобы сохранить нужный вид. Эти техники дают полный контроль над внешним видом текста без использования XML‑разметки, делая ваш Android‑код более динамичным и гибким.