Как программно установить стиль textView?

Я создаю textView программно. Есть ли способ установить стиль этого textView? Что-то похожее

style="@android:style/TextAppearance.DeviceDefault.Small"

который я бы использовал, если бы у меня был файл layout.xml.


person lokoko    schedule 22.02.2013    source источник
comment
вы не можете установить стиль любого представления прагматично. но вы можете установить отдельные свойства представления   -  person Kapil Vats    schedule 22.02.2013
comment
Возможный дубликат Android - установить TextView TextStyle программно?   -  person Massimiliano Kraus    schedule 02.12.2016


Ответы (8)


Вы не можете программно установить стиль представления, но вы можете сделать что-то вроде textView.setTextAppearance(context, android.R.style.TextAppearance_Small);.

person Matthew    schedule 22.02.2013
comment
Используйте 1_ - person Nedko; 09.02.2016

В настоящее время невозможно установить стиль представления программно.

Чтобы обойти это, вы можете создать XML-файл макета шаблона с назначенным стилем, например, в res/layout создать tvtemplate.xml as со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="This is a template"
        style="@android:style/TextAppearance.DeviceDefault.Small" />

затем раздуйте это, чтобы создать экземпляр вашего нового TextView:

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null);
person Raghav Sood    schedule 22.02.2013
comment
Мне нравится это решение лучше, чем принятый ответ, поскольку оно поддерживает стиль, как запросил OP (и я хотел). Кроме того, всегда так... неправильно... использовать конструктор android.widget. - person James A Wilson; 26.08.2015

На самом деле это возможно с уровня API 21.

TextView имеет конструктор с 4 параметрами:

TextView (Context context, 
          AttributeSet attrs, 
          int defStyleAttr, 
          int defStyleRes)

Два средних параметра в этом случае не нужны. Следующий код создает TextView непосредственно в действии и определяет только его ресурс стиля:

TextView myStyledTextView = new TextView(this, null, 0, R.style.my_style);
person John Rattz    schedule 03.06.2017

Совместимая версия (из-за устаревания в API 23):

TextViewCompat.setTextAppearance(textView, android.R.style.TextAppearance_DeviceDefault_Small);
person shmakova    schedule 07.05.2018

Попробуй это

textview.setTextAppearance(context, R.style.yourstyle);

это может не сработать, попробуйте создать xml с таким текстовым представлением

textviewstyle.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        style="@android:style/TextAppearance.DeviceDefault.Small" />

Чтобы получить желаемый стиль, раздуйте xml, содержащий textview

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvstyle, null);
person Pragnani    schedule 22.02.2013

Для представлений, сгенерированных во время выполнения (в коде), вы можете передать стиль конструктору: View(Context, AttributeSet, int)

В другом случае вам нужно вызвать различные методы для изменения внешнего вида.

person outlying    schedule 22.02.2013

@Deprecated
public void setTextAppearance(Context context, @StyleRes int resId)

Этот метод устарел, начиная с Android SDK 23.

Вы можете использовать безопасную версию:

if (Build.VERSION.SDK_INT < 23) {
    super.setTextAppearance(context, resId);
} else {
    super.setTextAppearance(resId);
}
person Robert Grabiński    schedule 17.01.2018

textView.setTextAppearance(context, android.R.style.TextAppearance_Small);

устарел в java, поэтому используйте его без контекста для kotlin

textView.setTextAppearance(android.R.style.TextAppearance_Small)
person raj varsani    schedule 16.05.2021