前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >android 设置系统dialog 样式

android 设置系统dialog 样式

作者头像
再见孙悟空_
发布于 2023-02-10 11:07:46
发布于 2023-02-10 11:07:46
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

 1、编写一个文本样式。 DIALOG的标题是一个textview,在sytles.xml中,添加如下代码来设置你自己的文本样式:   ?   <style name="DialogWindowTitle">   <item name="android:textSize">22sp</item>   <item name="android:textColor">@color/font_dark_grey</item>   </style>   2、设置对话框的标题主题。   上面的标题文本并不能直接设置为对话框的标题样式。 我们还需要编写一个表示标题的主题的style,在这里指定标题的文本样式。代码如下:   ?   <style name="DialogWindowTitle.DeviceDefault">   <item name="android:maxLines">1</item>   <item name="android:scrollHorizontally">true</item>   <item name="android:textAppearance">@style/DialogWindowTitle</item>   </style>   3、设置对话框主题。   接下来,我们编写我们的对话框主题,在这里指定标题的主题。由于一些属性并不是public的,所以我们需要继承自原来的某个style,代码如下:   ?   <!--Dialog主题-->   <style name="Theme.DeviceDefault.Dialog" parent="@android:style/Theme.DeviceDefault.Light.Dialog">   <item name="android:windowTitleStyle">@style/DialogWindowTitle.DeviceDefault</item>   </style>   4、自定义App的主题。   接下来,我们需要在我们的App theme中指定我们的对话框使用这种主题,所以需要定义一个App theme。同样由于App theme的许多属性并不是public的(比如下面要提到的标题下面的那条蓝线),所以我们要继承自一个原生的style。这里我根据程序需要选择了Theme.Holo.Light.NoActionBar,代码如下:   ?   <style name="ParkingTheme" parent="@android:style/Theme.Holo.Light.NoActionBar">   <item name="android:dialogTheme">@style/Theme.DeviceDefault.Dialog</item>   </style>   5、指定App主题。   最后一步,我们需要在AndroidManifest.xml文件中,指定我们的app主题。这步很简单,只需要在application标签中指定android:theme的值即可,如下:   ?   android:theme="@style/ParkingTheme"   不过这只是指定了Dialog的主题。如果是通过AlertDialog创建出来的对话框,主题还是原来的。所以我们还需要以下步骤。   7、编写AlertDialog主题。   我们无法直接继承系统主题里的AlertDialog的style。如把parent指定为Theme.DeviceDefault.Dialog.Alert,Theme.Holo.Dialog.Alert,Theme.DeviceDefault.Light.Dialog.Alert或Theme.Holo.Light.Dialog.Alert,都会导致编译不过。所以我们需要继承自Dialog的style。在这里我以Theme.Holo.Light.Dialog为例,代码如下:   <!--AlderDialog主题-->   <style name="Theme.DeviceDefault.Dialog.Alert" parent="@android:style/Theme.Holo.Light.Dialog">   <item name="android:windowBackground">@android:color/transparent</item>   <item name="android:windowTitleStyle">@style/DialogWindowTitle.DeviceDefault</item>   <item name="android:windowContentOverlay">@null</item>   <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>   <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>   </style>   在这里我参考了原生的alertDialog的style,设定了窗口背景为透明,以及windowContentOverlay为null这两个重要属性,否则你会看到在AlertDialog下面还有一层对话框的背景,或者是对话框的背景遮住了所有内容这样的问题存在。   8、指定AlertDialog的主题。   我们需要在第4步所说的自定义的AppTheme中,添加一行代码来指定要使用的AlertDialog的style,代码如下:   ?    <item name="android:alertDialogTheme">@style/Theme.DeviceDefault.Dialog.Alert</item>   9、修改标题下面的蓝色线。   如果你修改了对话框的主题颜色,那么标题下面的蓝色的线肯定会让你很郁闷。如果对话框较少,你可以选择隐藏标题,然后自定义一个包含了标题的View来设置为对话框的内容。但是如果你的对话框有许多种,而且本来都是可以调用原来的API就来生成的话,要去定义这么多个带标题的view,这样做下来心里肯定是很纠结的。   标题下面的蓝色的线,并不是在Dialog或AlertDialog中设置或通过它们的style中定义的。它是定义在各种风格的dialog的layout当中,然后再在AppTheme里面指定dialog的对应属性。遗憾的是,目前我看到这几个相关属性还不是public的,不能自己设置,所以只有通过Java代码来实现了。   表示这条蓝色的线的叫做titleDivider,我们可以通过getResources()的API来获取它的IP,然后设置颜色。代码如下:   ?    public static final void dialogTitleLineColor(Dialog dialog, int color) {   Context context = dialog.getContext();   int divierId = context.getResources().getIdentifier("android:id/titleDivider", null, null);   View divider = dialog.findViewById(divierId);   divider.setBackgroundColor(color);   }   这行代码对于自定义的Dialog,可以在setContentView之后调用。但是对于AlertDialog,必须在show()方法被调用之后才可以去调用,否则会报错。

附 修改  标题和线 颜色 方法  里面的color自己定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//修改默认AlertDialog的标题颜色 和 下面蓝色线的颜色
	 public static void dialogTitleLineColor(Dialog dialog,Context context) {
		 
		 //获取标题textView 并设置颜色
		 try {
			 Field mAlert = AlertDialog.class.getDeclaredField("mAlert");  
			 mAlert.setAccessible(true);  
		     Object alertController = mAlert.get(dialog);  
		     Field mTitleView = alertController.getClass().getDeclaredField("mTitleView");  
		     mTitleView.setAccessible(true);  
		     TextView title = (TextView) mTitleView.get(alertController);
		     title.setTextColor(context.getResources().getColor(R.color.country_standard_defaulg));
		} catch (Exception e) {
			
		}
		 //获取下面线对象view 并设置颜色
		 
		 int divierId = context.getResources().getIdentifier("android:id/titleDivider", null, null);
		 View divider = dialog.findViewById(divierId);
		 divider.setBackgroundColor(context.getResources().getColor(R.color.country_standard_defaulg));
	 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
项目需求讨论-Android 自定义Dialog实现步骤及封装
在项目中,我们会遇到各种各样的界面需求,比如对话框和选择框,都是会配合具体项目的UI界面来做,而不是说用自带的弹出框。比如下面在登录界面的二个对话框效果。都是我在做具体项目中所要求实现的:
用户2802329
2018/08/07
1.5K0
项目需求讨论-Android 自定义Dialog实现步骤及封装
Android 撸起袖子,自己封装 DialogFragment
DialogFragment 在 Android 3.0 时被引入,是一种特殊的 Fragment,用于在 Activity 的内容之上显示一个静态的对话框。例如:警告框、输入框、确认框等。
developerHaoz
2018/08/20
1.5K0
自定义Dialog---实现优美对话框
PS:自定义dialog,一些系统的dialog已经不能满足开发人员的需求了,所以,我们需要自定义一个属于并且适合自己项目的对话框,无论是颜色还是功能需求上都是和自己的项目紧密相关的,一些系统的对话框的使用请看博客:https://www.cnblogs.com/codingblock/p/4721597.html。下面开始自定义。
cMusketeer
2019/08/21
6.5K0
自定义Dialog---实现优美对话框
Android常用对话框大全——Dialog「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137960.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/23
4.3K0
Android常用对话框大全——Dialog「建议收藏」
【Android 应用开发】 ActionBar 样式详解 -- 样式 主题 简介 Actionbar 的 icon logo 标题 菜单样式修改
转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/39269163
韩曙亮
2023/03/27
3.2K0
【Android 应用开发】 ActionBar 样式详解 -- 样式 主题 简介 Actionbar 的 icon logo 标题 菜单样式修改
android dialog用法
转自:http://www.cnblogs.com/weeds/archive/2012/01/17/2324238.html
forrestlin
2022/04/02
1.5K0
Android项目实战(三十二):圆角对话框Dialog
前言:   项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框。   对话框包括:1、圆角         2、app图标 , 提示文本,关闭对话框的"确定"按钮   难点:1、对话框
听着music睡
2018/05/18
2.4K1
Android之AlertDialog的基本使用
坦白说,AlertDialog我在工作中用得并不多,因为AlertDialog的样式比较固定和呆板,为了和App的整体设计匹配,一般都是使用自定义的Dialog,只有在要求不高时用一下。但是作为Android的基础控件之一,掌握它是十分有必要。网上相关的资料已经多如牛毛,一搜就有好几页。但我还是决定写一篇自己的博客。
233333
2021/04/09
1.6K0
Android之AlertDialog的基本使用
Android自定义Dialog
在开发中,我们经常会用到一些自定义布局的对话框。每次自己写的时候,经常会遇到一些细小的问题需要上网来解决,所以干脆把经常遇到的几个问题总结了一下,这样就可以愉快自定义dialog了。本文主要总结的问题有:1.对话框的大小、位置 2.对话框的主题
developerHaoz
2022/05/13
1.2K0
Android自定义Dialog
Android 天气APP(二十六)增加自动更新(检查版本、通知栏下载、自动安装)
  对于任何APP来说基本上都会有自动更新这个功能,那么为什么我的这个APP之前没有写呢?因为之前APP比较小,更像是一个Demo,看的人没有几个,更像是我在自娱自乐,不过随着我不断的更新APP的功能和写博客,使用的用户增加了,虽然不多,但我还是蛮开心的,增加APP自动更新这个功能的好处就是,无论以后我更新了什么功能,只要你打开APP就会提醒你新增的功能,你可以安装使用,也可以不安装都随你。说了这么多废话了,还是来实践吧。
晨曦_LLW
2020/09/25
1.4K0
好用的dialog工具类,单例实现,普通的Dialog和Textview设置Int型
(2)使用addViewOnclick(viewId, listener)方法添加view的点击监听:
zhangjiqun
2024/12/16
1220
Android设计模式学习之Builder模式
建造者模式(Builder Pattern),是创造性模式之一,Builder 模式的目的则是为了将对象的构建与展示分离。Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。
老马的编程之旅
2022/06/22
7890
Android设计模式学习之Builder模式
相关推荐
项目需求讨论-Android 自定义Dialog实现步骤及封装
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验