Как изменить цвет текста по умолчанию с помощью пользовательской темы? - PullRequest
53 голосов
/ 07 марта 2012

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

обновление

Я посмотрел на 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>

Однако, все еще не работает.

Просто найденодругая публикация для того же вопроса: http://groups.google.com/group/android-developers/browse_thread/thread/2897ccd0884546b9

Ответы [ 5 ]

51 голосов
/ 07 марта 2012

В вашем 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")

EDIT

theme.xml:

<style name="MyTheme" parent="@android:style/TextAppearance">
    <item name="android:textColor">#ffffffff</item>
    <item name="android:textSize">12dp</item>
</style>

Manifest:

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/MyTheme">

Обратите внимание, я объединяю цвет и размер текста в один и тот же style. Кроме того, я изменил название темы на MyTheme и теперь ссылаюсь на это в Manifest. И я изменил на @android:style/TextAppearance для значения parent.

41 голосов
/ 24 февраля 2014

Когда вы создаете приложение, в вашей папке 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 по умолчанию также называется «Тема».Таким образом, вы называете это «Тема», вероятно, запутали программу.

name="Theme.AppBaseTheme" означает, что вы создаете стиль, который наследует все стили от parent="@android:style/Theme.Light".Эту часть вы можете игнорировать, если не хотите снова наследовать от AppBaseTheme.= <style name="AppTheme" parent="AppBaseTheme">

@ drawable / custom_background - это пользовательское изображение, которое я помещаю в папку рисованного объекта.Это изображение размером 300x300 png.

# 295055 темно-синего цвета.

Мой код меняет цвет фона и текста.Для текста кнопки, пожалуйста, просмотрите нативные стили Google (ссылка, которую я дал вам выше).

Затем в манифесте Android не забудьте указать код:

<application
android:theme="@style/Theme.AppBaseTheme">
18 голосов
/ 22 января 2014

Вы не можете использовать @android:style/TextAppearance в качестве родителя для всей темы приложения;вот почему решение koopaking3 выглядит довольно неработоспособным.

На измените цвет текста по умолчанию везде в вашем приложении , используя пользовательскую тему, попробуйте что-то вроде этого.Работает как минимум на 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">

Обновление

Недостатком вышеупомянутого является то, что также отключено Элементы меню переполнения панели действий используют цвет по умолчанию вместо того, чтобы быть серым.(Конечно, если вы не используете отключенные пункты меню в своем приложении, это может не иметь значения.)

Как я узнал , задавая этот вопрос , лучший способ определитьцвет с использованием рисования :

<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>
1 голос
/ 18 апреля 2019

Убедитесь, что макет вашей активности переопределяет тему, найдите макет вашей активности, расположенный по адресу layout/*your_activity*.xml, и найдите TextView , который содержит android:textColor="(some hex code") что-то подобное в макете активности, и удали его. Затем снова запустите ваш код.

0 голосов
/ 24 августа 2015
<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>

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

...