Допустим, я хочу, чтобы все TextViewэкземпляры в моем приложении были textColor="#ffffff". Есть ли способ установить это в одном месте вместо того, чтобы устанавливать его для каждого TextView?
Допустим, я хочу, чтобы все TextViewэкземпляры в моем приложении были textColor="#ffffff". Есть ли способ установить это в одном месте вместо того, чтобы устанавливать его для каждого TextView?
Ответы:
Фактически, вы можете установить стиль по умолчанию для 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, и, похоже, отлично работает.
<item name="android:textViewStyle">@style/MyTextViewStyle</item>в стиль MyTheme, а затем применю стиль к моему приложению, все мои TextViews будут отображаться в соответствии со стилем (даже имя приложения на панели действий). Как исправить проблему с панелью действий? Я хочу, чтобы у него был вид по умолчанию. Github
<item name="android:textViewStyle">@style/MyTextViewStyle</item>туда же, просто указав на ActionBar по умолчанию (или что-то подобное)
Это можно сделать двумя способами:
Вы можете определить свои собственные стили, создав 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.
Это еще один возможный способ добиться этого, и это будет предоставить ваш собственный, 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>
Используете ли вы тот или иной выбор, зависит от ваших потребностей. Если единственное, что вы хотите сделать, это изменить внешний вид, тогда лучший подход - это первый. С другой стороны, если вы хотите изменить внешний вид и добавить некоторые новые функции к своим виджетам, вам подойдет второй вариант.
custom_view_layout.xmlфайле, который используется для расширения настраиваемого класса?
Для цвета текста по умолчанию в TextView, установленной android:textColorTertiaryв вашей теме в желаемый цвет:
<item name="android:textColorTertiary">@color/your_text_color</item>
Цветами многих других элементов управления Android можно управлять с помощью атрибутов платформы или атрибутов библиотеки поддержки, если вы используете библиотеку поддержки.
Для получения списка атрибутов , которые вы можете установить, проверить исходный код Android в styles.xmlи themes.xml, или это очень полезно сути Дэн Льет, попробуйте изменить значение каждое и посмотреть , что они меняют на экране.