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

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

Ответ 1

На самом деле вы можете установить стиль по умолчанию для 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, и, похоже, отлично работает.

Ответ 2

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

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>

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

Заходите и следите за мной на Github, и вы получите некоторую помощь, если начнете свою карьеру в качестве разработчика Android https://github.com/amansharma-dev

Благодарю. :)