Android去除AlertDialog的按钮栏的分隔线
作者:Mmuz_4078 发布时间:2021-06-06 18:53:54
在网上学习了一种继承系统AlertDialog然后用一统一方法控制dialog显示的方法,效果还不错,但按钮栏那里的分隔线并不是想要的。于是去查看sdk中的AlertDialog的xml文件中的布局,发现其中并没有这一分隔线的影子,所以判断应该是在style中进行设置的。
在styles文件中找到常用的Dialog的主题如:"Theme.Holo.Light.Dialog"。
<style name="Theme.Holo.Light.Dialog">
<item name="windowFrame">@null</item>
<item name="windowTitleStyle">@style/DialogWindowTitle.Holo.Light</item>
<item name="windowBackground">@drawable/dialog_full_holo_light</item>
<item name="windowIsFloating">true</item>
<item name="windowContentOverlay">@null</item>
<item name="windowAnimationStyle">@style/Animation.Holo.Dialog</item>
<item name="windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">true</item>
<item name="windowCloseOnTouchOutside">@bool/config_closeDialogWhenTouchOutside</item>
<item name="colorBackgroundCacheHint">@null</item>
<item name="buttonBarStyle">@style/Holo.Light.ButtonBar.AlertDialog</item>
<item name="borderlessButtonStyle">@style/Widget.Holo.Light.Button.Borderless.Small</item>
<item name="textAppearance">@style/TextAppearance.Holo.Light</item>
<item name="textAppearanceInverse">@style/TextAppearance.Holo.Light.Inverse</item>
<item name="listPreferredItemPaddingLeft">16dip</item>
<item name="listPreferredItemPaddingRight">16dip</item>
<item name="listPreferredItemPaddingStart">16dip</item>
<item name="listPreferredItemPaddingEnd">16dip</item>
<item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item>
</style>
在其中找到有关按钮栏的样式:“Holo.Light.ButtonBar.AlertDialog”。
<style name="Holo.Light.ButtonBar.AlertDialog">
<item name="background">@null</item>
<item name="dividerPadding">0dp</item>
</style>
发现这里没有有关分隔线的设置,于是接着看它的父样式:"Holo.Light.ButtonBar"。
<style name="Holo.Light.ButtonBar" parent="Holo.ButtonBar" />
这里只是继承了“Holo.ButtonBar”,所以接着向上找。
<style name="Holo.ButtonBar" parent="ButtonBar">
<item name="paddingTop">0dip</item>
<item name="paddingStart">0dip</item>
<item name="paddingEnd">0dip</item>
<item name="paddingBottom">0dip</item>
<item name="divider">?attr/dividerVertical</item>
<item name="showDividers">middle</item>
<item name="dividerPadding">12dip</item>
<item name="background">@null</item>
</style>
终于看到了有关divider的属性。
<item name="divider">?attr/dividerVertical</item>
<item name="showDividers">middle</item>
<item name="dividerPadding">12dip</item>
name="divider“
属性名为“divider”的值是一个dividerVertical的引用。
<!-- Drawable to use for generic vertical dividers. -->
<attr name="dividerVertical" format="reference" />
然后theme文件中找到它。
<item name="dividerVertical">?attr/listDivider</item>
发现dividerVertical的值还是一个引用listDivider,于是我们继续在theme文件中找到listDivider。
<item name="listDivider">@drawable/list_divider_holo_dark</item>
到这,就知道了名为”divider“的属性最终是引用了一个drawable来当做分隔线。
name="showDividers"
android:showDividers属性可以设置如下4个值:
none:不显示分隔线;
beginning:在LinearLayout的开始处显示分隔线;
end:在Linearlayout的结尾处显示分隔线;
middle:在LinearLayout中的每两个组件间显示分隔线;
所以如果不想按钮栏带有分隔线就可以创建自己的按钮栏样式并继承”Holo.Light.ButtonBar.AlertDialog“,然后将这一属性设为"none"。
<style name="My_ButtonBar_Style" parent="@android:style/Holo.Light.ButtonBar.AlertDialog">
<item name="android:showDividers">none</item>
</style>
然后将自定义的样式加入自定义的alert_dialog主题中,这样divider就不会再显示了。
<style name="alert_dialog" parent="@android:style/Theme.Holo.Light.Dialog">
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowNoTitle">false</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowBackground"> @android:color/transparent</item>
<item name="android:buttonStyle">@style/Button_Style</item>
<item name="android:buttonBarStyle">@style/Gui_ButtonBar_Style</item>
</style>
除去divider.png
name="dividerPadding"
这一属性就是分隔线对于按钮栏的padding。例如,如果是垂直的divider,则这一padding就是divider距离按钮栏上下边界的距离。
dividerPadding.png
来源:https://www.jianshu.com/p/69c234a2f845


猜你喜欢
- 公司的研发管理平台实现了Gitlab+Kubernetes的Devops,在ToB和ToC场景中,由于用户量大,且预发布环境和生产环境或多或
- 一、项目搭建1、新建模块2、导入依赖 :将不相关的依赖删掉<!-- <de
- 完全属于自己的新闻展示平台,展示给大家,希望大家喜欢。一、新闻的数据库的构建脚本代码如下:(使用的mysql5.0 数据库)SET SQL_
- 本文实例为大家分享了PhotoView实现图片多点触控效果展示的具体代码,供大家参考,具体内容如下效果:点击后能够自由缩放、平移;添加依赖:
- 前言一直对它们之间的关系感到好奇,SpringBoot既然是Spring的封装,那么SpringBoot在初始化时应该也会有Bean的加载,
- java可以通过Runtime.getRuntime().exec()执行一个操作系统的命令,在操作系统层面执行命令也就创建了一个进程,Ja
- 一:软键盘自动弹出。private EditText top_middle;//输入框//-------------------------
- 多进程如果需要的时候,app可以创建多进程。在进程里面各类组件元素的清单文件条目 、 、 和— 均支持 android:process 属性
- 1,背景在开发中总会遇到一个可拖拽的悬浮View,不管是在开发中,还是在线上,都时长有这样的控件,我们通常遇到这种情况,经常需要自己封装,需
- 目录项目结构:1.pom引入mongodb依赖2 配置application.properties3.创建mongodb文档映射实体类Spr
- Android镂空字体的实现效果图,感兴趣的朋友可以参考实现代码。效果图:记录一下...自定义TextViewpublic class Ho
- 本文实例为大家分享了jdk1.7配置教程,供大家参考,具体内容如下第一步:下载jdk1.7下载地址:链接 密码: wrmf第二步:
- 背景在Spring boot项目开发中经常遇到需要使用枚举的场景,比如描述状态、性别、类型等相关字段。通常这些字段在数据库会以tinyint
- 控制语句——for练习语句的嵌套应用累加求和,计数器循环嵌套一、语句的嵌套应用语句嵌套形式。其实就是语句中还有语句。形式多种多样,没有固定的
- 前言镜像配置都是常规操作,必要时也可以上代理.自己搭的nexus本质也是一种镜像,可以代理maven中央仓库.各个仓库的测速,可以使用这个脚
- 对于随机数,大家都知道,计算机不 可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果
- Java去掉指定字符串的开头的指定字符/** * 去掉指定字符串的开头的指定字符 *
- 学习Demo contains方法:用于判断list集合是否包含某个元素containsKey方法:用于判断Map键中是否包含某个
- 一、流程图二、Token1、token是一种客户端认证机制,是一个经过加密的字符串,安全性强,支持跨域2、用户第一次登录,服务器通过数据库校
- WPF换肤的设计原理,利用资源字典为每种皮肤资源添加不同的样式,在后台切换皮肤资源文件。截图上图中,第一张图采用规则样式,第二张图采用不规则