Я хотел бы переопределить AccentColor, используемый PreferenceFragmentCompat версии 14.
Я использую розовый акцентный цвет для внешней рамки моего приложения для Android. Это создает проблемы во многих ситуациях, поскольку приводит к тому, что стандартные элементы управления используют цвет акцента, который достаточно близок к красному, что вызывает беспокойство. Как бы то ни было, мне нравится эффект наличия розового FAB и кнопок управления на рамке.
Для детских занятий я использую их со стандартным бирюзовым акцентным цветом. Однако у меня есть соответствие PreferenceFragment в ящике основного действия, и я не могу понять, как переопределить цвет акцента основного действия.
Вещи, которые я пробовал (ничего из этого не работает):
Установка темы на кадр фрагмента, который получает PreferenceFragmentCompat (не работает):
<FrameLayout android:id="@+id/preferenceFragmentFrame"
android:layout_width="match_parent" android:layout_height="0dp"
android:layout_weight="1"
android:theme="@style/AppTheme.TealAccentColor"
/>
где стиль AppTheme.TealAccentColor предоставляет явный бирюзовый acccentColor.
Установка акцента в теме предпочтений (не работает):
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
...
<item name="preferenceTheme">@style/MyPreferenceThemeOverlay</item>
</style>
<style name=MyPreferenceThemeOverlay parent="PreferenceThemeOverlay.v14.Material>
<item name="colorAccent">@color/colorAccentTeal</item>
</style>
Добавление цвета акцента в PreferenceThemeOverlay Preference-v14 (не работает):
<!-- use the library's theme-->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
...
<item name="preferenceTheme">PreferenceThemeOverlay.v14.Material</item>
</style>
<!-- but add an accentColor item to the library's theme -->
<style name="PreferenceThemeOverlay.v14">
<item name="colorAccent">@color/colorAccentTeal</item>
</style>
Независимо от того, что я делаю, PreferenceFragmentCompat вместо этого берет розовый цвет акцента из темы Activity.
Я уверен, что это как-то связано с разрывом между темой Activity и темой Fragment. Но для фрагмента нет элемента xml, поскольку PreferenceFragmentCompat предоставляет собственный макет.
Может быть, есть способ сделать это программно с переопределением в классе, который расширяет PreferenceFragmentCompat, но если и есть, я не могу представить, что бы это было. Большинство точек атаки, о которых я могу думать, либо имеют доступ к созданному внутри макету, либо имеют доступ к макету после его создания, что уже слишком поздно.
Картинка может помочь:
Preference...
и темировать их там... Мне нужна независимая от темы тематика в том смысле, что я не определяю темы в xml (только базовая темная/светлая тема) и позволяю своим пользователям выберите любой цвет в качестве основного/дополнительного/акцентного цвета... - person prom85   schedule 07.07.2016