Моя ситуация была с настройками цвета текста в меню настроек (главное меню приложения показывалось при нажатии кнопки меню).
Протестировано в API 16 с библиотекой appcompat-v7-27.0.2 , AppCompatActivity
для темы MainActivity
и AppCompat
для приложения в AndroidManifest. XML .
styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="actionBarPopupTheme">@style/PopupTheme</item>
</style>
<style name="PopupTheme" parent="@style/ThemeOverlay.AppCompat.Light">
<item name="android:textColorSecondary">#f00</item>
</style>
Не знаю, влияет ли это textColorSecondary
на другие элементы, но контролирует цвет текста меню.
Я искал несколько примеров по теме, но все готовые к использованию фрагменты не работали.
Поэтому я хотел исследовать его с помощью исходного кода для библиотеки appcompat-v7 (в частности, с папкой res пакета .aar ).
Хотя в моем случае я использовал Eclipse с разнесенными .aar зависимостями. Так что я мог бы изменить стили по умолчанию и проверить результаты. Не знаю, как взорвать библиотеки для использования с Gradle или Android Studio напрямую. Это заслуживает другого потока исследования.
Так что моей целью было найти какой цвет в файле res / values / values.xml для текста меню (я был почти уверен, что цвет был там).
- Я открыл этот файл, затем продублировал все цвета, поместил их ниже значений по умолчанию, чтобы переопределить их, и присвоил им значение
#f00
.
- Запустите приложение.
- Многие элементы имели красный фон или цвет текста. И пункты меню тоже. Это было то, что мне было нужно.
- Удаление добавленных цветов блоками по 5-10 строк. Я закончил с цветным элементом
secondary_text_default_material_light
.
- Поиск этого имени в файлах в папке res (или лучше в res / colors ) Я нашел только одно вхождение в color / abc_secondary_text_material_light.xml file (я использовал Sublime Text для этих операций, чтобы легче было найти нужную вещь).
- Назад к values.xml 8 было найдено использование для
@color/abc_secondary_text_material_light
.
- Это была тема Light , поэтому 4 осталось в 2 темах:
Base.ThemeOverlay.AppCompat.Light
и Platform.AppCompat.Light
.
- Первая тема была дочерней по отношению ко второй, поэтому в этом цветном ресурсе было только 2 атрибута:
android:textColorSecondary
и android:textColorTertiary
в Base.ThemeOverlay.AppCompat.Light
.
- Изменив их значения непосредственно в values.xml и запустив приложение, я обнаружил, что последний правильный атрибут был
android:textColorSecondary
.
- Затем мне понадобилась тема или другой атрибут, чтобы я мог изменить его в style.xml моего приложения (поскольку моя тема имела в качестве родителя
Theme.AppCompat.Light
, а не ThemeOverlay.AppCompat.Light
).
- Я искал в том же файле для
Base.ThemeOverlay.AppCompat.Light
. У него был ребенок ThemeOverlay.AppCompat.Light
.
- Поиск
ThemeOverlay.AppCompat.Light
Я нашел его использование в теме Base.Theme.AppCompat.Light.DarkActionBar
в качестве значения атрибута actionBarPopupTheme
.
- Тема моего приложения
Theme.AppCompat.Light.DarkActionBar
была дочерней для найденного Base.Theme.AppCompat.Light.DarkActionBar
, поэтому я мог без проблем использовать этот атрибут в моем styles.xml .
- Как видно из приведенного выше примера кода, я создал дочернюю тему из упомянутого
ThemeOverlay.AppCompat.Light
и изменил атрибут android:textColorSecondary
.