Скажімо, я хочу, щоб усі 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(у цьому випадку, жирному та червоному)!
Це було протестовано на пристроях від рівня 4 API і, здається, працює чудово.
<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, або це дуже корисно суті Ден Ллє, спробуйте змінити значення кожне і подивитися , що вони змінюють на екрані.