Android修改自带Setting(设置)获取焦点颜色

自带的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进行了自定义,所以还是一步一个脚印来修改比较靠谱。

发表回复

CAPTCHAis initialing...