Как изменить стиль TextView во время выполнения - PullRequest
96 голосов
/ 08 января 2011

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

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

textview.setTextAppearance();

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

Ответы [ 8 ]

141 голосов
/ 08 января 2011

Я сделал это, создав новый файл 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);
90 голосов
/ 20 января 2011

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

textView.setTypeface(null, Typeface.BOLD); // Typeface.NORMAL, Typeface.ITALIC etc.
12 голосов
/ 13 марта 2012
TextView tvCompany = (TextView)findViewById(R.layout.tvCompany);
tvCompany.setTypeface(null,Typeface.BOLD);

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

4 голосов
/ 25 ноября 2016

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

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

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

Summved

2 голосов
/ 17 мая 2012

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

1 голос
/ 30 марта 2016

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

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

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

0 голосов
/ 25 сентября 2014

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

0 голосов
/ 08 января 2011

См. Документацию для setText () в TextView. http://developer.android.com/reference/android/widget/TextView.html

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...