Я пытаюсь использовать TextView
конструктор со стилем, как это:
TextView myText = new TextView(MyActivity.this, null, R.style.my_style);
Однако, когда я делаю это, текстовое представление, кажется, не принимает стиль (я проверил стиль, установив его на статический объект).
Я также пытался использовать, myText.setTextAppearance(MyActivity.this, R.style.my_style)
но это также не работает.
Вы можете создать общий стиль и повторно использовать его в нескольких текстовых представлениях, как показано ниже:
Изменить: это относится к контексту
источник
TextViewCompat.setTextAppearance
Вы можете передать ContextThemeWrapper в конструктор следующим образом:
источник
<style name="TabButton"><item name="android:background">@drawable/tabbar_button_bkgnd</item>...</style>
. И тогда я призываю это с конструкциейnew Button(new ContextThemeWrapper(context, R.style.TabButton));
. Но кнопка просто игнорирует мои настройки. Я что-то здесь не так делаю?parent="@android:style/Widget.Button"
parent
не изменилось немного. Так что я просто пошел дальше сinflate
решением.new Button(new ContextThemeWrapper(context, R.style.TabButton), null, 0)
. В противном случае будет применен стиль кнопки по умолчанию, и этот стиль будет переопределять стиль кнопки, который вы добавили в тему через ContextThemeWrapper.Вы можете установить стиль в конструкторе (но стили не могут быть динамически изменены / установлены).
View(Context, AttributeSet, int)
(int
атрибут текущей темы, содержащий ссылку на стиль)Ответ от Ромена Гая
ссылка
источник
Параметр int
defStyleAttr
не определяет стиль. Из документации Android:Для настройки стиля в конструкторе View у нас есть 2 возможных решения:
С использованием ContextThemeWrapper:
С конструктором с четырьмя аргументами (доступно начиная с LOLLIPOP):
Ключевая вещь для обоих решений -
defStyleAttr
параметр должен быть 0, чтобы применить наш стиль к представлению.источник
Динамическое изменение стилей не поддерживается (пока). Вы должны установить стиль до того, как представление будет создано через XML.
источник
Принятый ответ был отличным решением для меня. Единственное, что нужно добавить, это
inflate()
метод.В принятом ответе все
android:layout_*
параметры не будут применены.Причина не в том, чтобы отрегулировать это, причина
null
была передана какViewGroup parent
.Вы можете использовать это так:
View view = inflater.inflate(R.layout.view, parent, false);
и
parent
этоViewGroup
, откуда вы хотели бы настроитьandroid:layout_*
.В этом случае все относительные свойства будут установлены.
Надеюсь, это будет кому-то полезно.
источник
При использовании пользовательских представлений, которые могут использовать наследование стилей (или атрибуты стиля событий), вы должны изменить второй конструктор, чтобы не потерять стиль. Это сработало для меня, без необходимости использовать setTextAppearence () :
источник
Я тоже столкнулся с проблемой и нашел способ задавать стиль программно. Может быть, вам всем это нужно, поэтому я обновляюсь там.
Третий параметр конструктора View принимает тип attr в вашей теме в качестве исходного кода ниже:
Таким образом, вы должны передать тип R.attr. ** вместо R.style. **
В своих кодах я сделал следующие шаги:
Во-первых, настройте пользовательский атрибут, который будет использоваться темами в файле attr.xml.
Во-вторых, укажите свой стиль в используемой теме в style.xml.
В конце используйте!
представление, созданное программно, будет использовать указанный стиль в вашей теме.
Вы можете попробовать, и надеюсь, что это сработает для вас отлично.
источник
Я тестировал только с EditText, но вы можете использовать метод
применить стиль, определенный в файле XML.
Поскольку этот метод принадлежит View, я считаю, что он будет работать с любым элементом пользовательского интерфейса.
С уважением.
источник
Мы можем использовать
TextViewCompact.setTextAppearance(textView, R.style.xyz)
.Android док для справки.
источник