Настройка глобальных стилей для Views в Android

Предположим, я хочу, чтобы все экземпляры TextView в моем приложении имели textColor="#ffffff" . Есть ли способ установить это в одном месте вместо того, чтобы устанавливать его для каждого TextView ?

Solutions Collecting From Web of "Настройка глобальных стилей для Views в Android"

На самом деле вы можете установить стиль по умолчанию для TextViews (и большинства других встроенных виджета) без необходимости выполнять пользовательский класс java или настраивать стиль отдельно.

Если вы посмотрите в themes.xml в источнике Android, вы увидите кучу атрибутов для стиля по умолчанию для разных виджетов. Ключ – это textViewStyle (или editTextStyle и т. Д.), editTextStyle вы переопределяете в своей настраиваемой теме. Вы можете переопределить их следующим образом:

Создайте styles.xml :

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyTheme" parent="android:Theme"> <item name="android:textViewStyle">@style/MyTextViewStyle</item> </style> <style name="MyTextViewStyle" parent="android:Widget.TextView"> <item name="android:textColor">#F00</item> <item name="android:textStyle">bold</item> </style> </resources> 

Затем просто примените эту тему к вашему приложению в AndroidManifest.xml :

 <application […] android:theme="@style/MyTheme">… 

И все ваши текстовые представления по умолчанию будут соответствовать стилю, определенному в MyTextViewStyle (в данном случае полужирным и красным)!

Это было протестировано на устройствах с уровня API 4, и, похоже, отлично работает.

Это можно сделать двумя способами:

1. Использование стилей

Вы можете определить свои собственные стили, создав файлы XML в каталоге res/values . Итак, давайте предположим, что вы хотите иметь красный и полужирный текст, тогда вы создаете файл с этим контентом:

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyRedTheme" parent="android:Theme.Light"> <item name="android:textAppearance">@style/MyRedTextAppearance</item> </style> <style name="MyRedTextAppearance" parent="@android:style/TextAppearance"> <item name="android:textColor">#F00</item> <item name="android:textStyle">bold</item> </style> </resources> 

Вы можете назвать его так, как хотите, например res/values/red.xml . Тогда единственное, что вам нужно сделать, это использовать это представление в виджетах, которые вы хотите, например:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView style="@style/MyRedTheme" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="This is red, isn't it?" /> </LinearLayout> 

Для получения дополнительной информации вы можете прочитать эту статью: Понимание Android-стилей и стилей

2. Использование пользовательских классов

Это еще один возможный способ добиться этого, и это будет предоставление вашего собственного TextView который всегда будет устанавливать цвет текста так, как вы хотите; например:

 import android.content.Context; import android.graphics.Color; import android.util.AttributeSet; import android.widget.TextView; public class RedTextView extends TextView{ public RedTextView(Context context, AttributeSet attrs) { super(context, attrs); setTextColor(Color.RED); } } 

Затем вам просто нужно рассматривать его как обычный TextView в вашем XML-файле:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <org.example.RedTextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="This is red, isn't it?" /> </LinearLayout> 

Используете ли вы тот или иной выбор, зависит от ваших потребностей. Если единственное, что вы хотите сделать, это изменить внешний вид, тогда лучший подход будет первым. С другой стороны, если вы хотите изменить внешний вид и добавить некоторые новые функции в свои виджеты, второй – это путь.

Определите стиль и используйте его для каждого виджета, определите тему, которая переопределяет андроид по умолчанию для этого виджета или задает строковый ресурс и ссылается на него в каждом виджете

Для цвета текста по умолчанию в TextView установите android:textColorTertiary в вашей теме на нужный цвет:

 <item name="android:textColorTertiary">@color/your_text_color</item> 

Многие другие цвета элемента управления Android можно контролировать с помощью атрибутов структуры или атрибутов библиотеки поддержки, если вы используете библиотеку поддержки.

Для списка атрибутов, которые вы можете установить, ознакомьтесь с исходным кодом Android styles.xml и themes.xml , или это очень полезно для Дэна Лью, попробуйте изменить каждое значение и посмотреть, что они меняют на экране.