公司最近项目需求是用实体键来在应用内操作,这就需要对那些可点击的widget的背景进行自定义,使其响应focus状态随即变化。大部分的layout改动都是挺简单的。
但是遇到一个主要的问题就是自带的PreferenceFragment,里面的layout不是通过平时常用的Button ImageView那些来写的,而是在res/xml文件夹下的一个xml文件,里面的item都是类似ListPreference、CheckBoxPreference这些,而里面的属性不像平常的widget一样可定制,因此需要一些不一样的方法。

废话不多说,这篇文章讲的主要内容就是对点击ListPreference后弹出的Dialog内的可点击控件背景进行自定义。

首先,这是默认效果:



然后如果想改变这内部的layout,我翻阅过网上很多的文章,其中有一篇感觉靠谱:感觉靠谱的文章

里面提到想自定义这个Dialog里的layout,就是重写PreferenceFragmentCompat里的onDisplayPreferenceDialog方法,修改show的那个Dialog,因为我用的就是PreferenceFragmentCompat,所以如果用的是不同的父载体可能不同。

正当我准备这样去重写一个Dialog时,我感觉事情可能更简单,因此我就再看了一下这个源码,发现他弹出的其实就是一个AlertDialog,那岂不是在style里自定义AlertDialog的样式就行?

二话不说马上开干,就继承了其中一个Dialog的样式然后修改里面对应的几个值:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item><item name="alertDialogTheme">@style/CustomAlertDialogTheme</item>
</style><style name="CustomAlertDialogTheme" parent="Theme.AppCompat.Light.Dialog"><item name="android:windowBackground">@drawable/bg_round_rectangle</item><item name="android:listChoiceBackgroundIndicator">@drawable/background_focus_test</item><item name="buttonBarButtonStyle">@style/CustomButtonStyle</item>
</style><style name="CustomButtonStyle"><item name="android:background">@drawable/background_focus_test</item>
</style>

android:listChoiceBackgroundIndicator是ListView的item背景
buttonBarButtonStyle可以自定义最底下的确定、取消按钮的样式
但是修改buttonStyle是不起效的喔,试过了,所以记得要改buttonBarButtonStyle

效果如下:


就是这么简单。

但其实在实现这个效果前还是走了不少弯路,因为是PreferenceActivity所以一开始以为是要修改preferenceTheme的样式,但是对弹出的Dialog一直不起作用,反正就是在反复地试错。但是网上没有相关的文章或者提出的需求,只能自己慢慢琢磨。

希望有类似需求的各位能少走些弯路。

自定义ListPreference弹出Dialog背景相关推荐

  1. 自定义底部弹出Dialog(老掉牙的需求还是记录一下吧)

    (1)布局: phonto_dialog.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and ...

  2. Android中修改弹出dialog背景无色透明,弹出时有遮罩

    先在styles.xml中写入下面样式 1 <style name="dialog" parent="@android:style/Theme.Dialog&quo ...

  3. Android自定义底部弹出窗-dialog(2种实现分析+源码)

    Android自定义底部弹出窗-dialog(2种实现分析+源码) 上线项目功能抽取,在项目开发中,我们会在许多地方会用到底部自定义弹窗,比如设置:个人账户退出,切换,照片的拍照或者相册的调出,或者一 ...

  4. android的底部弹出框炫酷的样式,Android自定义底部弹出框ButtomDialog

    本文实例为大家分享了Android自定义底部弹出框的具体代码,供大家参考,具体内容如下 先看看效果和你要的是否一样 一 .先来配置自定义控件需要的资源 1.在res文件夹下创建一个anim文件夹并创建 ...

  5. java右键弹出菜单_javascript自定义右键弹出菜单实现方法

    本文实例讲述了javascript自定义右键弹出菜单实现方法.分享给大家供大家参考.具体实现方法如下: 无标题页 var oPopup = window.createPopup(); function ...

  6. html自定义js程序,JS中微信小程序自定义底部弹出框

    实现微信小程序底部弹出框效果,代码分为html,css和js两部分,具体代码详情大家参考下本文. html CSS .commodity_screen { width: 100%; height: 1 ...

  7. jquery mobile用代码弹出dialog

    一.点击弹出dialog 见 http://www.w3school.com.cn/jquerymobile/jquerymobile_pages.asp 中"将页面作为dialog&quo ...

  8. 弹出框 背景固定 滑动

    // 弹出框 背景滑动问题 style.cssText 弹出框父级absolute body fixed 弹出框absolute 也是一种解决方案 val 变量,当前弹出框状态huaDong (val ...

  9. js 弹出框 背景不滑动 方案

    这是一个系列,记录我前端开发常用的代码,小常识,有些是参考网上代码,(讲的可能有点烂,求不要打脸,嘤嘤嘤~~)送给那些需要的人.可以相互交流,喜欢的加我吧. Wx: Lxp911221 js 弹出框 ...

最新文章

  1. 面试定心丸:AI知识点备忘录(包括ML、DL、Python、Pandas等)
  2. JVM 史上最最最完整深入解析(12000 字噢)
  3. cad打印样式ctb丢失_我的第一次打印:cad模型空间套图框打印图纸
  4. 分享下我的博客园CSS
  5. (0072)iOS开发之UITableViewCell高度自适应探索--cell预估高度
  6. [转载]读塔莎奶奶的美好生活
  7. ActiveMQ的几种集群配置
  8. 参赛方案-主机托管、中小企业虚拟化应用
  9. 系统制成docker镜像_docker 制作自己的镜像
  10. 华为 招聘 状态 查看_英特尔放弃5G芯片研发:三星受益;爱立信2019年Q1净利润约2.51亿美元;华为也将要与高通和解;天津首个5G电话成功打通...
  11. ORACLE与PostgreSql的区别
  12. 基于JAVA+SpringBoot+Mybatis+MYSQL的婚纱影楼摄影网站
  13. 七月算法机器学习2 数理统计与参数估计2
  14. j3455跑mysql_看烦了千篇一律的J3455?让黑群晖显示真实的CPU信息
  15. matlab list函数参数,Matlab 函数参数汇总
  16. 深度学习系列资料总结
  17. 零基础怎么学习平面设计,学习平面设计需要多久?
  18. 【2022 CCPC 华为云计算挑战赛】1005 带权子集和 (NTT 优化dp)
  19. 怎么让python播放音频_用Python播放音频
  20. Activiti7实战二:实现具有拒签功能的请假2层审批流程

热门文章

  1. ESXI install FREE NAS
  2. JavaWeb过滤器解决中文乱码问题
  3. 智能交通数据集Rope3D(仅限科研使用)
  4. 我在北京生活的尴尬——读韩寒《马上会跌,跌破一千》有感
  5. 【数据治理】浅谈数据治理
  6. CabloyJS一站式助力微信、企业微信、钉钉开发 - 微信篇
  7. python shutil_Python3 shutil(高级文件操作模块)
  8. 【建议改为:活 学 活 用】如何使用git工具一键隐藏/管理你的“学习资料”?
  9. 腾讯游戏海量业务场景下的个性化安全运营之道
  10. AMFPHP在64位机上无法正确转换负数