Скажем, я хочу весь 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, и, похоже, отлично работает.
Это можно сделать двумя способами:
Вы можете определить свои собственные стили, создав 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>
Используете ли вы тот или иной выбор, зависит от ваших потребностей. Если единственное, что вы хотите сделать, это изменить внешний вид, тогда лучший подход - это первый. С другой стороны, если вы хотите изменить внешний вид и добавить некоторые новые функции в свои виджеты, вам подойдет второй вариант.
Определите стиль и используйте его для каждого виджета, определите тему, которая переопределяет стандартную тему android для этого виджета, или определите строковый ресурс и ссылайтесь на него в каждом виджете