自带的setting获取焦点的控件使用的是以下背景
android:background="?android:attr/selectableItemBackground" selectableItemBackground是一个带有波纹效果的背景图片,而波纹的颜色最终会调用到FrameWork的colorControlHighlight值,在res\values\themes.xml 的<style name="Theme.Settings" parent="Theme.SettingsBase">添加 <item name="colorControlHighlight">#C6000000</item>发现修改无效。所以通过搜寻Theme.SettingsBase在./values/themes_device_defaults.xml:737: <style name="Theme.DeviceDefault.Settings" parent="Theme.Material.Settings">节点内添加 <item name="colorControlHighlight">#C6000000</item>即可
你以为这样就够了吗?其实还有一堆的问题,首先android 的设置使用了Preferences这个组件进行页面渲染,也进行了Preferences重写,所以你需要通过找到Preferences 的layout文件重新写一个layout文件。列入
java这样加这个: xxxPreference.setLayoutResource(R.layout.yout_layout);
xml加这个:android:layout=”@layout/yout_layout”
layout/yout_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="@drawable/yout_layout_bg" //重新定义背景,改背景修改了背景焦点色 android:paddingTop="1dp" android:padding="15dp" android:paddingStart="?android:attr/listPreferredItemPaddingStart" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"> 。。。。 </LinearLayout>
yout_layout_bg.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:drawable="@color/colorfocus"/>//定义你的焦点色 <item android:state_pressed="true" android:drawable="@color/colorfocus" /> <item android:state_selected="true" android:drawable="@color/colorfocus" /> <item android:drawable="@color/colordefault"/>//定义你的默认色 </selector>
另外对话框的按钮焦点色也不明显,也进行了重新定义你需要注释掉
Settings/res/values/themes.xml
中<item name=”android:alertDialogTheme”>@style/Theme.AlertDialog</item>这行代码
总结:修改全局主题只能解决一部分问题,有些地方setting进行了自定义,所以还是一步一个脚印来修改比较靠谱。