如何更改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文档导出工具与使用教程
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?

