全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何更改Dialog的标题与按钮颜色详解

前言

本文主要给大家介绍了如何更改Dialog的标题与按钮颜色的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

android.support.v7.app.AlertDialog

在这个类中第一行就定义了如下变量:

final AlertController mAlert;

AlertDialog的功能的具体实现都在这个AlertController内部封装.

修改按钮颜色

1. AlertDialog.getButton

public Button getButton(int whichButton) {
 return mAlert.getButton(whichButton);
 }

这里的参数whichButton有三种类型:

  • DialogInterface.BUTTON_POSITIVE
  • DialogInterface.BUTTON_NEGATIVE
  • DialogInterface.BUTTON_NEUTRAL

传入对应的参数即可得到对应的Button

Button btnPositive = (Button)AlertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
btnPositive.setTextColor(color);

这种方式只能设置按钮的颜色,而无法设置标题颜色

2 AlertDialog.getWindow

AlertDialog的构造函数如下:

protected AlertDialog(@NonNull Context context, @StyleRes int themeResId) {
 super(context, resolveDialogTheme(context, themeResId));
 mAlert = new AlertController(getContext(), this, getWindow());
 }

这里初始化了AlertController,并传入了getWindow() ,这个getWindow()是AlertDialog继承自Dialog的方法.方法如下:

#Dialog.getWindow()
 public @Nullable Window getWindow() {
 return mWindow;
 }

将这个window对象传入AlertController后,在AlertController源码中可以看到对话框标题和按钮的id,并通过Window.findViewById(id)获取对应的View.

所以这里可以这样得到对话框的标题和按钮:

//标题
TextView tvTitle = (TextView)AlertDialog.getWindow().findViewById(R.id.alertTitle);
//按钮
Button btnPositive = (Button)AlertDialog.getWindow().findViewById(R.id.button1);

然后设置所需要的颜色就可以了.这种方法可以修改Dialog的所有设置了id的控件的字体颜色.

3 反射

3.1 首先拿到AlertController对象

 Field mAlert = AlertDialog.class.getDeclaredField("mAlert");
 mAlert.setAccessible(true);
 Object controller = mAlert.get(dialog);

在AlertController内部查找到需要更改字体颜色的标题和按钮

Button mButtonPositive;
Button mButtonNegative;
Button mButtonNeutral;
private TextView mTitleView;
private TextView mMessageView;

然后通过反射获取对应控件,修改控件颜色即可

 Field mTitleView = controller.getClass().getDeclaredField("mTitleView");
 mTitleView.setAccessible(true);
 TextView tvTitle = (TextView) mTitleView.get(controller);
 tvTitle.setTextColor(Color.GREEN);//更改标题的颜色

三种方式比较起来,第二种是最简单,效率也是最高的

更改Dialog显示的位置

Window window = dialog.getWindow();
 WindowManager.LayoutParams lp = window.getAttributes();
lp.gravity = Gravity.BOTTOM;
lp.x = 100;
lp.y = 100;
window.setAttributes(lp);

这里要注意的是,WindowManager.LayoutParams的x和y坐标,看源码注释如下:

 /**
  * X position for this window. With the default gravity it is ignored.
  * When using {@link Gravity#LEFT} or {@link Gravity#START} or {@link Gravity#RIGHT} or
  * {@link Gravity#END} it provides an offset from the given edge.
  */
 @ViewDebug.ExportedProperty
 public int x;

 /**
  * Y position for this window. With the default gravity it is ignored.
  * When using {@link Gravity#TOP} or {@link Gravity#BOTTOM} it provides
  * an offset from the given edge.
  */
 @ViewDebug.ExportedProperty
 public int y;

如果lp.gravity是默认的,那么x和y即使设置了也是无效的.因此x和y需要和lp.gravity搭配使用才有效果.当然lp.gravity也可以单独使用.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# dialog标题居中  # dialog去掉标题栏  # dialog自定义关闭按钮  # artdialog的图片/标题以及关闭按钮不显示的解决方法  # Android实现点击AlertDialog上按钮时不关闭对话框的方法  # Android使用自定义alertdialog实现确认退出按钮  # AlertDialog点击按钮不消失的实现方法  # Android中AlertDialog 点击按钮后不关闭对话框的功能  # 对话框  # 的是  # 相关内容  # 在这个  # 都在  # 说了  # 不多  # 要注意  # 给大家  # 才有  # 可以看到  # 三种  # 这篇文章  # 谢谢大家  # 最简单  # 所需要  # 第二种  # 有三种  # 就可以  # 方法如下 


相关文章: 武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何选购建站域名与空间?自助平台全解析  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  婚礼视频制作网站,学习*后期制作的网站有哪些?  如何通过智能用户系统一键生成高效建站方案?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  建站之星导航配置指南:自助建站与SEO优化全解析  宁波自助建站系统如何快速打造专业企业网站?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何选择靠谱的建站公司加盟品牌?  电商网站制作公司有哪些,1688网是什么意思?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  如何选择香港主机高效搭建外贸独立站?  图册素材网站设计制作软件,图册的导出方式有几种?  微信小程序 input输入框控件详解及实例(多种示例)  英语简历制作免费网站推荐,如何将简历翻译成英文?  定制建站策划方案_专业建站与网站建设方案一站式指南  建站主机选哪家性价比最高?  C++如何编写函数模板?(泛型编程入门)  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  如何在IIS中配置站点IP、端口及主机头?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  如何在阿里云部署织梦网站?  javascript基本数据类型及类型检测常用方法小结  如何快速搭建自助建站会员专属系统?  如何获取PHP WAP自助建站系统源码?  建站主机服务器选购指南:轻量应用与VPS配置解析  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  如何零基础在云服务器搭建WordPress站点?  建站之星收费标准详解:套餐费用及年费价格表一览  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  C#怎么使用委托和事件 C# delegate与event编程方法  网站制作需要会哪些技术,建立一个网站要花费多少?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  Python文件管理规范_工程实践说明【指导】  TestNG的testng.xml配置文件怎么写  如何在IIS7上新建站点并设置安全权限?  如何快速查询网址的建站时间与历史轨迹?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  如何通过虚拟机搭建网站?详细步骤解析  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  如何选择高效便捷的WAP商城建站系统?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  建站之星后台密码遗忘如何找回?  如何在IIS7中新建站点?详细步骤解析  如何在建站之星绑定自定义域名? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。