Подтвердить что ты не робот

Как изменить цвет текста по умолчанию с помощью настраиваемой темы?

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

Тем не менее, он все еще не работает.

Вот еще один пост об этой же проблеме.

4b9b3361

Ответ 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>

попробуйте этот...