Установка глобальных стилей для представлений в Android
125
Допустим, я хочу, чтобы все TextViewэкземпляры в моем приложении были textColor="#ffffff". Есть ли способ установить это в одном месте вместо того, чтобы устанавливать его для каждого TextView?
Фактически, вы можете установить стиль по умолчанию для TextViews (и большинства других встроенных виджетов) без необходимости создавать собственный класс java или индивидуально настраивать стиль.
Если вы заглянете themes.xmlв исходный код Android, вы увидите множество атрибутов стиля по умолчанию для различных виджетов. Ключ - это textViewStyle(илиeditTextStyle атрибут и т. Д.), Который вы переопределяете в своей настраиваемой теме. Вы можете переопределить их следующим образом:
Самое элегантное решение, которое я видел до сих пор.
Итало Борссатто, 02
@Steve, если я включу элемент <item name="android:textViewStyle">@style/MyTextViewStyle</item>в стиль MyTheme, а затем применю стиль к моему приложению, все мои TextViews будут отображаться в соответствии со стилем (даже имя приложения на панели действий). Как исправить проблему с панелью действий? Я хочу, чтобы у него был вид по умолчанию. Github
Максим Дмитриев
@Steve, Как применить обе темы (панель действий и виджет) к приложению
Pratik Butani
Я не уверен, как отличить ActionBar от других вещей. Возможно, вы сможете найти место, где установлен ваш стиль ActionBar, а затем поместить <item name="android:textViewStyle">@style/MyTextViewStyle</item>туда же, просто указав на ActionBar по умолчанию (или что-то подобное)
Стив Помрой
@StevePomeroy, это не работает для меня ... не могли бы вы оказать поддержку. Мой стиль для TextViews остается прежним. Есть ли минимум элементов, которые мне нужно установить, или есть элементы, которые мне не разрешено устанавливать?
Майк
52
Это можно сделать двумя способами:
1. Использование стилей
Вы можете определить свои собственные стили, создав XML-файлы в res/valuesкаталоге. Итак, предположим, вы хотите иметь красный и полужирный текст, затем вы создаете файл с этим содержимым:
Вы можете назвать его, например, как хотите res/values/red.xml. Тогда единственное, что вам нужно сделать, это использовать это представление в виджетах, которые вы хотите, например:
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewstyle="@style/MyRedTheme"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="This is red, isn't it?"/></LinearLayout>
Это еще один возможный способ добиться этого, и это будет предоставить ваш собственный, TextViewкоторый всегда устанавливает цвет текста на любой желаемый ; например:
Затем вам просто нужно рассматривать это как нормальное TextViewв вашем XML-файле:
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><org.example.RedTextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="This is red, isn't it?"/></LinearLayout>
Используете ли вы тот или иной выбор, зависит от ваших потребностей. Если единственное, что вы хотите сделать, это изменить внешний вид, тогда лучший подход - это первый. С другой стороны, если вы хотите изменить внешний вид и добавить некоторые новые функции к своим виджетам, вам подойдет второй вариант.
использование пользовательских классов должно быть предпочтительным, поскольку это более чистый подход и помогает сохранить легкий вес XML-файла.
Амит Кумар,
@AmitKumar Нет, не должны! В данном конкретном случае это означало бы использовать отдельный настраиваемый класс для каждого значения атрибута. Это создает большой объем кода и делает фактический макет более нечитаемым (вам придется посетить каждый класс, чтобы увидеть, что он делает, вместо того, чтобы просто читать несколько строк xml). Пользовательские классы следует использовать только в том случае, если вы изменяете поведение, но не, если единственным изменением является внешний вид представления.
Андре
Невозможно установить стиль пользовательского представления из xml? Почему мы не можем использовать его в custom_view_layout.xmlфайле, который используется для расширения настраиваемого класса?
lucidbrot
5
Для цвета текста по умолчанию в TextView, установленной android:textColorTertiaryв вашей теме в желаемый цвет:
Цветами многих других элементов управления Android можно управлять с помощью атрибутов платформы или атрибутов библиотеки поддержки, если вы используете библиотеку поддержки.
Для получения списка атрибутов , которые вы можете установить, проверить исходный код Android в styles.xmlи themes.xml, или это очень полезно сути Дэн Льет, попробуйте изменить значение каждое и посмотреть , что они меняют на экране.
Спасибо, мужик! Я потратил кучу времени, выясняя, почему textColorPrimary не работает.
pratt
3
Определите стиль и используйте его для каждого виджета, определите тему, которая переопределяет значение Android по умолчанию для этого виджета, или определите строковый ресурс и укажите на него ссылку в каждом виджете.
Ответы:
Фактически, вы можете установить стиль по умолчанию для TextViews (и большинства других встроенных виджетов) без необходимости создавать собственный класс java или индивидуально настраивать стиль.
Если вы заглянете
themes.xml
в исходный код Android, вы увидите множество атрибутов стиля по умолчанию для различных виджетов. Ключ - этоtextViewStyle
(илиeditTextStyle
атрибут и т. Д.), Который вы переопределяете в своей настраиваемой теме. Вы можете переопределить их следующим образом:Создайте
styles.xml
:Затем просто примените эту тему к своему приложению в
AndroidManifest.xml
:И все ваши текстовые представления по умолчанию будут иметь стиль, определенный в
MyTextViewStyle
(в данном случае жирный и красный)!Это было протестировано на устройствах, начиная с уровня API 4, и, похоже, отлично работает.
источник
<item name="android:textViewStyle">@style/MyTextViewStyle</item>
в стиль MyTheme, а затем применю стиль к моему приложению, все моиTextView
s будут отображаться в соответствии со стилем (даже имя приложения на панели действий). Как исправить проблему с панелью действий? Я хочу, чтобы у него был вид по умолчанию. Github<item name="android:textViewStyle">@style/MyTextViewStyle</item>
туда же, просто указав на ActionBar по умолчанию (или что-то подобное)Это можно сделать двумя способами:
1. Использование стилей
Вы можете определить свои собственные стили, создав XML-файлы в
res/values
каталоге. Итак, предположим, вы хотите иметь красный и полужирный текст, затем вы создаете файл с этим содержимым:Вы можете назвать его, например, как хотите
res/values/red.xml
. Тогда единственное, что вам нужно сделать, это использовать это представление в виджетах, которые вы хотите, например:Для получения дополнительной информации вы можете прочитать эту статью: Общие сведения о темах и стилях Android.
2. Использование пользовательских классов
Это еще один возможный способ добиться этого, и это будет предоставить ваш собственный,
TextView
который всегда устанавливает цвет текста на любой желаемый ; например:Затем вам просто нужно рассматривать это как нормальное
TextView
в вашем XML-файле:Используете ли вы тот или иной выбор, зависит от ваших потребностей. Если единственное, что вы хотите сделать, это изменить внешний вид, тогда лучший подход - это первый. С другой стороны, если вы хотите изменить внешний вид и добавить некоторые новые функции к своим виджетам, вам подойдет второй вариант.
источник
custom_view_layout.xml
файле, который используется для расширения настраиваемого класса?Для цвета текста по умолчанию в
TextView
, установленнойandroid:textColorTertiary
в вашей теме в желаемый цвет:Цветами многих других элементов управления Android можно управлять с помощью атрибутов платформы или атрибутов библиотеки поддержки, если вы используете библиотеку поддержки.
Для получения списка атрибутов , которые вы можете установить, проверить исходный код Android в
styles.xml
иthemes.xml
, или это очень полезно сути Дэн Льет, попробуйте изменить значение каждое и посмотреть , что они меняют на экране.источник
Определите стиль и используйте его для каждого виджета, определите тему, которая переопределяет значение Android по умолчанию для этого виджета, или определите строковый ресурс и укажите на него ссылку в каждом виджете.
источник