Установка глобальных стилей для представлений в Android - PullRequest
114 голосов
/ 20 июня 2010

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

Ответы [ 4 ]

231 голосов
/ 02 июля 2010

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

Если вы посмотрите на themes.xml в источнике Android, вы увидите набор атрибутов стиля по умолчанию для различных виджетов. Ключ - это атрибут textViewStyle (или 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 и, похоже, отлично работает.

45 голосов
/ 20 июня 2010

Есть два способа сделать это:

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>

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

4 голосов
/ 21 ноября 2015

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

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

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

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

3 голосов
/ 20 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...