2011-01-07 3 views
89

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

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

textview.setTextAppearance(); 

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

+0

Вы смотрели через TextView API документы? – Falmarri

+1

Я где-то читал, что это невозможно ... http://stackoverflow.com/questions/2016249/how-to-programmatically-setting-style-attribute-in-a-view. Но вы можете установить некоторые свойства отдельно. – Floern

+1

Вы попробовали: textView.setTextTypeface? http://developer.android.com/reference/android/widget/TextView.html#setTypeface(android.graphics.Typeface) –

ответ

130

Я сделал это, создав новый 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, чтобы захватить событие tap на этом TextView: EDIT:От A PI 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); 
+0

Превосходный ответ !! –

+2

На самом деле это не работает с теневыми стилями. Если вы хотите изменить тень, вы должны сделать это следующим образом: lockText.setShadowLayer (20, 4, 4, 0xFFFF0000); – Lukas

+2

Чтобы избежать проверки SDK, вы можете использовать TextViewCompat.setTextAppearance (myTextView, R.style.myStyle); –

0

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

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

87

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

textView.setTypeface(null, Typeface.BOLD); // Typeface.NORMAL, Typeface.ITALIC etc. 
+9

Вы можете использовать textView.setTypeface (null, Typeface.BOLD); textView..setTypeface (null, Typeface.ITALIC); textView.setTypeface (null, Typeface.BOLD_ITALIC); – peceps

+0

bold не работает для меня – erdomester

+2

textView.setTypeface (null, Typeface.BOLD) - это то, что сработало для меня. Конечно, вы могли бы использовать 1 вместо этого, но я полагаю, что некорректно вводить константы вручную. Лучше использовать предопределенные переменные в библиотеках. – Pijusn

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

Вам набор из кода. Typeface

2

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

+0

Это изменяет Typeface. _not_ стиль, заданный OP. – HBG

+0

Правда, все же это был самый простой способ - и, насколько я помню, единственный метод - во время публикации. Я не уверен, что добавлен новый API-метод, который позволяет изменить «стиль» на жирный шрифт без изменения шрифта. Пожалуйста, поправьте меня, если я ошибаюсь. – sfera

0

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

0

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

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

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

+0

Вы бы скорее объяснили, почему ваш код решит его проблему, спасибо. –

+1

Я отредактировал мой ответ –

+0

OP хочет изменить стиль, _not_ Typeface. – HBG

1

Программным: Время работы

можно сделать программно с помощью 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: Design Time

Вы можете установить в XML, а также:

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

Надеется, что это поможет

Summved