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

发布时间 - 2026-01-11 02:58:57    点击率:

前言

本文主要给大家介绍了如何更改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 点击按钮后不关闭对话框的功能  # 对话框  # 的是  # 相关内容  # 在这个  # 都在  # 说了  # 不多  # 要注意  # 给大家  # 才有  # 可以看到  # 三种  # 这篇文章  # 谢谢大家  # 最简单  # 所需要  # 第二种  # 有三种  # 就可以  # 方法如下 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  JavaScript如何实现音频处理_Web Audio API如何工作?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Linux系统命令中tree命令详解  Laravel安装步骤详细教程_Laravel环境搭建指南  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  JS实现鼠标移上去显示图片或微信二维码  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何快速打造个性化非模板自助建站?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  如何自定义建站之星模板颜色并下载新样式?  利用vue写todolist单页应用  实例解析angularjs的filter过滤器  黑客如何通过漏洞一步步攻陷网站服务器?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  Laravel如何处理和验证JSON类型的数据库字段  简单实现Android验证码  如何登录建站主机?访问步骤全解析  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  EditPlus中的正则表达式 实战(2)  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  如何快速搭建支持数据库操作的智能建站平台?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  高防服务器:AI智能防御DDoS攻击与数据安全保障  Laravel如何使用Vite进行前端资源打包?(配置示例)  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  PHP正则匹配日期和时间(时间戳转换)的实例代码  Laravel如何使用Livewire构建动态组件?(入门代码)  javascript基本数据类型及类型检测常用方法小结  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  个人摄影网站制作流程,摄影爱好者都去什么网站?  Linux安全能力提升路径_长期防护思维说明【指导】  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何获取PHP WAP自助建站系统源码?  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Laravel如何实现一对一模型关联?(Eloquent示例)  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?