如何在Android中全局更改首选项图标的颜色 [英] How to change Preference icon color globally Android
问题描述
我为所有首选项设置了平面图标,我想全局更改该图标的颜色.
I have set flat icon for all my Preference, I would like to change the color of that icon globally.
当我尝试以下代码时,它甚至更改了工具栏中的后退按钮颜色.
When I try the below code it even changes the back button color in the toolbar.
我只希望全局更改首选项"图标的色调.预先感谢.
I want only Preference icon tint to be changed globally. Thank in advance.
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreference
android:id="@+id/pref_toggle_alarm"
android:icon="@drawable/ic_pref_notifications"
android:key="key_toggle_alarm"
android:summaryOff="Alarm OFF"
android:summaryOn="Alarm ON"
android:title="Alarm" />
<web.prefs.TimePrefs
android:id="@+id/pref_select_time"
android:icon="@drawable/ic_pref_time"
android:key="key_time"
android:summary="Set some time"
android:title="Select Time" />
<MultiSelectListPreference
android:id="@+id/pref_select_week"
android:defaultValue="@array/week_array_values"
android:entries="@array/array_week_selection"
android:entryValues="@array/week_array_values"
android:icon="@drawable/ic_pref_time"
android:key="key_week"
android:title="Select Days" />
<ListPreference
android:id="@+id/pref_track"
android:defaultValue="0"
android:entries="@array/tracks_arrays"
android:entryValues="@array/tracks_arrays_values"
android:icon="@drawable/ic_music_note"
android:key="key_track"
android:summary="%s"
android:title="Select Track" />
</PreferenceScreen>
style.xml
style.xml
<style name="PreferencesTheme" parent="@style/AppTheme.NoActionBar">
<item name="android:textColorPrimary">@color/primary_text</item>
<item name="android:textColorSecondary">@color/secondary_text</item>
<item name="android:colorAccent">@color/accent</item>
<item name="android:tint">@color/accent</item>
</style>
推荐答案
这是经过多次测试后发现的解决方案.这意味着您至少使用API21.如果您使用的是以下API,建议您使用 values-v21 文件夹和适合默认文件的中性灰色的中性灰色.
Here are the solutions that I found after many tests. This implies that you use at least API 21. If you are below, I recommend using a values-v21 folder and a neutral gray color which adapts to black and white backgrounds for default file.
如果使用矢量图标,一种解决方案是使属性集成到每个图像的XML中.
One solution, if you use vector icons is to make an attribute to integrate into the XML of each image.
在values/attrs.xml中:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="iconPreferenceColor" format="reference|color" />
</resources>
在每个图标中添加 android:fillColor =?attr/iconPreferenceColor" ,示例:
In each icon add android:fillColor="?attr/iconPreferenceColor", sample :
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="?attr/iconPreferenceColor"
android:pathData="M13,2.05v3.03c3.39,0.49 6,3.39 6,6.92 0,0.9 -0.18,1.75 -0.48,2.54l2.6,1.53c0.56,-1.24 0.88,-2.62 0.88,-4.07 0,-5.18 -3.95,-9.45 -9,-9.95zM12,19c-3.87,0 -7,-3.13 -7,-7 0,-3.53 2.61,-6.43 6,-6.92V2.05c-5.06,0.5 -9,4.76 -9,9.95 0,5.52 4.47,10 9.99,10 3.31,0 6.24,-1.61 8.06,-4.09l-2.6,-1.53C16.17,17.98 14.21,19 12,19z"/>
</vector>
和样式:
<item name="iconPreferenceColor">@color/green</item>
解决方案B(更好)
可以使用 PreferenceThemeOverlay.v14.Material
从样式文件中直接着色图标.
Solution B (better)
It is possible to tint the icons directly from a style file with PreferenceThemeOverlay.v14.Material
.
在values/styles.xml中:
<style name="MyStyle.Night" parent="Theme.AppCompat" >
<item name="preferenceTheme">@style/MyStyle.Preference.v21</item>
...
</style>
<!-- Preference Theme -->
<style name="MyStyle.Preference.v21" parent="@style/PreferenceThemeOverlay.v14.Material">
<item name="android:tint">@color/green</item>
</style>
请注意,还必须使用工具栏样式的 android:tint
参数,否则动态更改主题时可能会出现错误.
Please note, you must also use the android:tint
parameter in the style of your toolbar, otherwise you may have bugs when changing themes dynamically.
我希望这会有所帮助
这篇关于如何在Android中全局更改首选项图标的颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!