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

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

118
задан Chris Stillwell 12 April 2016 в 20:16
поделиться

3 ответа

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

241
ответ дан 24 November 2019 в 01:55
поделиться

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

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>

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

48
ответ дан 24 November 2019 в 01:55
поделиться

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

3
ответ дан 24 November 2019 в 01:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: