Как изменить цвет текста по умолчанию с помощью настраиваемой темы?
То, что я пытаюсь сделать, должно быть довольно легко с темами, но я не могу понять, как:
Я хочу, чтобы весь текст по умолчанию был белым в моем приложении.
Я создал собственную тему в theme.xml:
<style name="Theme" parent="@android:Theme">
</style>
<style name="TextAppearance.Theme" parent="@android:TextAppearance.Theme">
<item name="android:textColor">#ffffffff</item>
</style>
и установите его для всего приложения:
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/Theme">
Но этикетки все еще черные.
Чего не хватает?
PS: Как я могу дополнительно определить стили для разных размеров текста, которые будут применяться к виджету?
Что-то подобное верно?
<style name="Theme.smallText">
<item name="android:textSize">12dp</item>
</style>
update
обновлениеЯ посмотрел файл themes.xml в Android SDK, он показывает, как установить стиль текста для темы:
<item name="textAppearance">@android:style/TextAppearance</item>
В моем случае это должно работать с этим определением:
<style name="Theme" parent="@android:Theme">
<item name="android:textAppearance">@style/MyText</item>
</style>
<style name="MyText" parent="@android:style/TextAppearance">
<item name="android:textColor">#ffffffff</item>
</style>
Тем не менее, он все еще не работает.
Вот еще один пост об этой же проблеме.
Ответы
Ответ 1
В Manifest
вам нужно указать имя style
, в котором есть цвет текста item
. Прямо сейчас вы просто ссылаетесь на пустой style
. Итак, в вашем theme.xml выполните только это style
:
<style name="Theme" parent="@android:style/TextAppearance">
<item name="android:textColor">#ffffffff</item>
</style>
И держите ссылку в Manifest
той же (android:theme="@style/Theme"
)
ИЗМЕНИТЬ
theme.xml:
<style name="MyTheme" parent="@android:style/TextAppearance">
<item name="android:textColor">#ffffffff</item>
<item name="android:textSize">12dp</item>
</style>
манифеста:
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/MyTheme">
Примечание. Я совмещаю цвет и размер текста с тем же style
. Кроме того, я изменил название темы на MyTheme и теперь ссылаюсь на это в Manifest
. И я изменился на @android:style/TextAppearance
для значения parent
.
Ответ 2
При создании приложения в папке res/values будет создан файл с именем styles.xml. Если вы измените стили, вы можете изменить фон, цвет текста и т.д. Для всех ваших макетов. Таким образом, вам не нужно входить в каждый отдельный макет и менять его вручную.
styles.xml:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Theme.AppBaseTheme" parent="@android:style/Theme.Light">
<item name="android:editTextColor">#295055</item>
<item name="android:textColorPrimary">#295055</item>
<item name="android:textColorSecondary">#295055</item>
<item name="android:textColorTertiary">#295055</item>
<item name="android:textColorPrimaryInverse">#295055</item>
<item name="android:textColorSecondaryInverse">#295055</item>
<item name="android:textColorTertiaryInverse">#295055</item>
<item name="android:windowBackground">@drawable/custom_background</item>
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
parent="@android:style/Theme.Light"
- родной цвет Google. Вот ссылка на то, что являются родными стилями:
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml
Стиль Android по умолчанию также называется "Тема". Таким образом, вы называете это Theme, вероятно, запутали программу.
name="Theme.AppBaseTheme"
означает, что вы создаете стиль, наследующий все стили от parent="@android:style/Theme.Light"
.
Эта часть, которую вы можете игнорировать, если вы хотите снова наследовать из AppBaseTheme. = <style name="AppTheme" parent="AppBaseTheme">
@drawable/custom_background - это пользовательское изображение, которое я помещаю в папку drawables. Это изображение размером 300 × 300 пикселей.
# 295055 - темно-синий цвет.
Мой код меняет цвет фона и текста. Для текста кнопки, пожалуйста, просмотрите родные стили Googles (ссылка, которую я дал выше).
Затем в Android Manifest не забудьте указать код:
<application
android:theme="@style/Theme.AppBaseTheme">
Ответ 3
Вы не можете использовать @android:style/TextAppearance
в качестве родителя для всей темы приложения; что почему koopaking3 solution кажется довольно сломанным.
Чтобы изменить цвет текста по умолчанию в приложении, используя специальную тему, попробуйте что-то вроде этого.
Работает как минимум на Android 4.0+ (уровень API 14 +).
res/values/themes.xml
:
<resources>
<style name="MyAppTheme" parent="android:Theme.Holo.Light">
<!-- Change default text colour from dark grey to black -->
<item name="android:textColor">@android:color/black</item>
</style>
</resources>
манифеста:
<application
...
android:theme="@style/MyAppTheme">
Update
Недостатком вышеуказанного является то, что также отключенные пункты меню переполнения панели действий используют цвет по умолчанию, вместо того, чтобы быть серым. (Конечно, если вы не используете отключенные пункты меню в любом месте своего приложения, это может не иметь значения.)
Как я узнал задав этот вопрос, лучший способ - определить цвет, используя drawable:
<item name="android:textColor">@drawable/default_text_color</item>
... с res/drawable/default_text_color.xml
с указанием отдельного цвета state_enabled="false"
:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@android:color/darker_gray"/>
<item android:color="@android:color/black"/>
</selector>
Ответ 4
Проверьте, переопределяет ли ваш макет активности тему, найдите макет вашего действия, расположенный в layout/*your_activity*.xml
, и найдите TextView, который содержит android:textColor="(some hex code")
что-то подобное в макете активности, и удалите его. Затем запустите ваш код снова.
Ответ 5
<color name="white">#FFFFFF</color>
<style name="Mytext" parent="@android:style/TextAppearance.Medium">
<item name="android:textSize">20sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textStyle">bold</item>
<item name="android:typeface">sans</item>
</style>
попробуйте этот...