Как изменить стиль TextView во время выполнения

У меня есть приложение для Android, в котором, когда пользователь нажимает TextView, я хотел бы применить определенный стиль.

Я думал найти textview.setStyle(), но его не существует. Я пытался

textview.setTextAppearance();

Но это не работает.


person Cris    schedule 07.01.2011    source источник
comment
Я где-то читал, что это невозможно ... stackoverflow.com/questions/2016249/. Но вы можете установить некоторые свойства отдельно.   -  person Floern    schedule 08.01.2011
comment
Вы пробовали: textView.setTextTypeface? developer.android.com/reference/android / widget /   -  person Jonathan Roth    schedule 08.01.2011
comment
@Falmarri ВЫ просматривали документы API TextView? Если да, то, может быть, вы могли бы сказать что-нибудь более конструктивное.   -  person Fletch    schedule 17.01.2012


Ответы (8)


Я сделал это, создав новый XML-файл res/values/style.xml следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="boldText">
        <item name="android:textStyle">bold|italic</item>
        <item name="android:textColor">#FFFFFF</item>
    </style>

    <style name="normalText">
        <item name="android:textStyle">normal</item>
        <item name="android:textColor">#C0C0C0</item>
    </style>

</resources>

У меня также есть записи в моем файле "strings.xml" вроде этого:

<color name="highlightedTextViewColor">#000088</color>
<color name="normalTextViewColor">#000044</color>

Затем в своем коде я создал ClickListener, чтобы перехватить событие касания в этом TextView: EDIT: Начиная с API 23, setTextAppearance устарел

    myTextView.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view){
                    //highlight the TextView
                    //myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
    if (Build.VERSION.SDK_INT < 23) {
       myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
    } else {
       myTextView.setTextAppearance(R.style.boldText);
    }
     myTextView.setBackgroundResource(R.color.highlightedTextViewColor);
                }
            });

Чтобы изменить его обратно, вы должны использовать это:

if (Build.VERSION.SDK_INT < 23) {
    myTextView.setTextAppearance(getApplicationContext(), R.style.normalText);
} else{
   myTextView.setTextAppearance(R.style.normalText);
}
myTextView.setBackgroundResource(R.color.normalTextViewColor);
person Glenn    schedule 08.01.2011
comment
На самом деле это не работает со стилями тени. Если вы хотите изменить тень, вы должны сделать это следующим образом: lockText.setShadowLayer (20, 4, 4, 0xFFFF0000); - person Lukas; 24.04.2013
comment
Чтобы избежать проверки SDK, вы можете использовать TextViewCompat.setTextAppearance (myTextView, R.style.myStyle); - person Justin Fiedler; 21.09.2016

Как и предположил Джонатан, использование textView.setTextTypeface работает, я просто использовал его в приложении несколько секунд назад.

textView.setTypeface(null, Typeface.BOLD); // Typeface.NORMAL, Typeface.ITALIC etc.
person DKDiveDude    schedule 20.01.2011
comment
Вы можете использовать textView.setTypeface (null, Typeface.BOLD); textView..setTypeface (ноль, Typeface.ITALIC); textView.setTypeface (нуль, Typeface.BOLD_ITALIC); - person peceps; 16.06.2011
comment
textView.setTypeface (null, Typeface.BOLD) - это то, что сработало для меня. Конечно, вместо этого вы можете использовать 1, но я думаю, что вводить константы вручную - не лучший вариант. Лучше использовать предопределенные переменные в библиотеках. - person Pijusn; 13.08.2012
comment
Не поощряйте людей использовать целые числа вместо констант. - person Chris.Jenkins; 11.09.2012
comment
Неплохо! Моя ошибка заключалась в том, что я отправлял свой старый шрифт в первом параметре. Так что это работает, когда я меняю НОРМАЛЬНЫЙ - ›ЖИРНЫЙ, но не ЖИРНЫЙ -› НОРМАЛЬНЫЙ. Я не знал, что первый параметр может быть нулевым! Теперь у меня все работает нормально! - person Felipe; 02.12.2012

TextView tvCompany = (TextView)findViewById(R.layout.tvCompany);
tvCompany.setTypeface(null,Typeface.BOLD);

Вы устанавливаете это из кода. Гарнитура

person Azhar    schedule 13.03.2012

Программно: время выполнения

Вы можете сделать это программно, используя 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:

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

Надеюсь, это поможет

Суммированный

person Summved Jain    schedule 25.11.2016

Я нашел textView.setTypeface(Typeface.DEFAULT_BOLD); самым простым методом.

person sfera    schedule 17.05.2012
comment
Это меняет гарнитуру. не стиль, как указано OP. - person HBG; 29.06.2017
comment
Правда, все же это был самый простой способ - и, насколько я помню, единственный способ - на момент публикации. Я не уверен, был ли тем временем добавлен новый метод API, который позволяет изменить стиль на полужирный без изменения шрифта. Пожалуйста, поправьте меня, если я ошибаюсь. - person sfera; 30.06.2017

попробуйте эту строку кода.

textview.setTypeface(textview.getTypeface(), Typeface.DEFAULT_BOLD);

здесь он получит текущий шрифт из этого текстового представления и заменит его новым шрифтом. Новый шрифт здесь DEFAULT_BOLD, но вы можете использовать гораздо больше.

person Md. Sajedul Karim    schedule 30.03.2016
comment
Вы бы лучше объяснили, почему ваш код решит его проблему, спасибо. - person Muhammed Refaat; 30.03.2016
comment
OP хочет изменить стиль, не гарнитуры. - person HBG; 29.06.2017

См. Doco для setText () в TextView http://developer.android.com/reference/android/widget/TextView.html

Чтобы стилизовать строки, прикрепите объекты android.text.style. * К SpannableString или см. Документацию по доступным типам ресурсов для примера установки форматированного текста в файле ресурсов XML.

person GSree    schedule 08.01.2011

В зависимости от того, какой стиль вы хотите установить, вам придется использовать разные методы. У TextAppearance есть собственный сеттер, у TypeFace есть собственный сеттер, у фона есть собственный сеттер и т. Д.

person akohout    schedule 25.09.2014