AlertDialog更改标题颜色,字体等

简介:

更改AlertDialog标题的方法google目前没有提供,只能通过其他办法

一种办法是:首先在源代码中找到有个叫AlertController的类,这个类就是AlertDialog的实现类,是没有对外公开的,然后在这个类中有个私有成员变量叫mTitleView,这个就是AlertDialog的title的TextView,所以只要得到这个成员变量的实例,即可自定义AlertDialog的title

得到这个的实例变量的方法通过两步反射来实现,如下:

[java]  view plain copy
  1. AlertDialog dialog = (AlertDialog) getDialog();  
  2. try {  
  3.     Field mAlert = AlertDialog.class.getDeclaredField("mAlert");  
  4.     mAlert.setAccessible(true);  
  5.     Object alertController = mAlert.get(dialog);  
  6.   
  7.     Field mTitleView = alertController.getClass().getDeclaredField("mTitleView");  
  8.     mTitleView.setAccessible(true);  
  9.   
  10.     TextView title = (TextView) mTitleView.get(alertController);  
  11.     title.setTextColor(0xff33b5e5);   
  12.   
  13. catch (NoSuchFieldException e) {  
  14.     e.printStackTrace();  
  15. catch (IllegalArgumentException e) {  
  16.     e.printStackTrace();  
  17. catch (IllegalAccessException e) {  
  18.     e.printStackTrace();  
  19. }  
[java]  view plain copy
  1. AlertDialog dialog = (AlertDialog) getDialog();  
  2. try {  
  3.     Field mAlert = AlertDialog.class.getDeclaredField("mAlert");  
  4.     mAlert.setAccessible(true);  
  5.     Object alertController = mAlert.get(dialog);  
  6.   
  7.     Field mTitleView = alertController.getClass().getDeclaredField("mTitleView");  
  8.     mTitleView.setAccessible(true);  
  9.   
  10.     TextView title = (TextView) mTitleView.get(alertController);  
  11.     title.setTextColor(0xff33b5e5);   
  12.   
  13. catch (NoSuchFieldException e) {  
  14.     e.printStackTrace();  
  15. catch (IllegalArgumentException e) {  
  16.     e.printStackTrace();  
  17. catch (IllegalAccessException e) {  
  18.     e.printStackTrace();  
  19. }  

当然还有其他办法,比如直接把title隐藏掉,然后在content View中自定义一个title出来等等

相关文章
|
Java Maven Android开发
Android 阿里云镜像整理
Android 阿里云镜像整理
7375 0
|
前端开发 UED 开发者
【Flutter前端技术开发专栏】Flutter中的列表与滚动视图优化
【4月更文挑战第30天】Flutter开发中,优化列表和滚动视图至关重要。本文介绍了几种优化方法:1) 使用`ListView.builder`和`GridView.builder`实现懒加载;2) 复用子组件以减少实例创建;3) 利用`CustomScrollView`和`Slivers`提升滚动性能;4) 通过`NotificationListener`监听滚动事件;5) 使用`KeepAlive`保持列表项状态。掌握这些技巧能提升应用性能和用户体验。
242 1
【Flutter前端技术开发专栏】Flutter中的列表与滚动视图优化
|
存储 Java API
Android系统 文件访问权限笔记
Android系统 文件访问权限笔记
1455 1
|
Java 调度
ScheduledExecutorService使用介绍
JUC包(java.util.concurrent)中提供了对定时任务的支持,即ScheduledExecutorService接口。 本文对ScheduledExecutorService的介绍,将基于Timer类使用介绍进行,因此请先阅读Timer类使用介绍文章。
1589 1
|
Android开发
Android APP 隐藏系统软键盘的方法
Android APP 隐藏系统软键盘的方法
352 0
|
Java API 开发工具
解决 Android 依赖冲突
解决 Android 依赖冲突
470 0
|
JSON Android开发 数据格式
Android 打开系统文件管理器,并返回选中文件的路径
Android 打开系统文件管理器,并返回选中文件的路径
621 0
|
机器学习/深度学习 TensorFlow 语音技术
【Android +Tensroflow Lite】实现从基于机器学习语音中识别指令讲解及实战(超详细 附源码和演示视频)
【Android +Tensroflow Lite】实现从基于机器学习语音中识别指令讲解及实战(超详细 附源码和演示视频)
243 0
|
文字识别 API Android开发
CameraX + 华为ScanKit:二维码扫描的终极解决方案
CameraX + 华为ScanKit:二维码扫描的终极解决方案
CameraX + 华为ScanKit:二维码扫描的终极解决方案