Android原生AlertDialog修改标题,内容,按钮颜色,字体大小等
来源:互联网 发布:nginx redis模块 编辑:程序博客网 时间:2024/06/05 10:21
private void showAlerDialog() { AlertDialog dialog = new AlertDialog.Builder(this) .setTitle("AlerDialog") .setMessage("这是一个AlertDialog") .setPositiveButton("确定",null) .setNegativeButton("取消",null) .create(); dialog.show(); }
需求
我们在android中可以很容易的通过上面的代码弹出一个AlertDialog
,其中的标题,内容还有按钮的颜色大小等,系统代码中并没有暴露出方法来允许我们自定义他们,可假如有需求,为了突出确定,需要将确定的按钮修改为红色,我们该怎么做呢,或者是需要修改标题颜色等,当然我们可以选择自定义View,在此处我们不讨论这个方法,我们尝试修改原生的AlertDialog
的标题,按钮颜色等;
分析
修改内容颜色
假如我们需要修改内容的颜色为蓝色,我们该如何修改呢?既然原生的AlertDialog
没有提供修改的方法,那我们可以通过反射来提取到这个控件,然后修改其颜色即可;
public class AlertDialog extends AppCompatDialog implements DialogInterface { final AlertController mAlert; ...}
点开AlertDialog
源码我们发现有一个全局的AlertController
,AlertDialog
主要就是通过这个类来实现的,我们继续看这个类的源码;
class AlertController { ... private ImageView mIconView; private TextView mTitleView; private TextView mMessageView; private View mCustomTitleView; ...
在这个类的源码中我们看到了有mTitleView
,mMessageView
等字段,这些字段就是我们所需要的,我们就可以通过反射来动态修改他们;
private void showAlerDialog() { AlertDialog dialog = new AlertDialog.Builder(this) .setTitle("AlerDialog") .setMessage("这是一个AlertDialog") .setPositiveButton("确定",null) .setNegativeButton("取消",null) .create(); dialog.show(); try { Field mAlert = AlertDialog.class.getDeclaredField("mAlert"); mAlert.setAccessible(true); Object mAlertController = mAlert.get(dialog); Field mMessage = mAlertController.getClass().getDeclaredField("mMessageView"); mMessage.setAccessible(true); TextView mMessageView = (TextView) mMessage.get(mAlertController); mMessageView.setTextColor(Color.BLUE); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } }
通过上面的代码,我们就可以通过反射来修改原生AlertDialog
中内容的颜色或者大小;
修改按钮颜色
修改按钮的颜色同样可以通过反射的方法来完成,不过原生的AlertDialog
提供了相应的方法来实现针对按钮的操作,所以我们可以通过以下方法直接调用,例如将按钮的颜色一个修改为黑色,一个修改为蓝色:
private void showAlerDialog() { AlertDialog dialog = new AlertDialog.Builder(this) .setTitle("AlerDialog") .setMessage("这是一个AlertDialog") .setPositiveButton("确定",null) .setNegativeButton("取消",null) .create(); dialog.show(); dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.BLUE); dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setTextColor(Color.BLACK); }
通过以上代码,就可以将AlertDialog
中按钮的颜色来自己定义;
这样我们就完成了自定义标题,内容,按钮颜色或者大小等,需要注意的是,不管是通过反射,还是原生的方法来修改,都需要在调用AlertDialog
的show()
方法后进行,否则会报错;
- Android原生AlertDialog修改标题,内容,按钮颜色,字体大小等
- Android原生AlertDialog修改标题,内容,按钮颜色,字体大小等
- Android原生AlertDialog修改标题,内容,按钮颜色,字体大小等
- AlertDialog修改标题、内容、按钮的颜色和字体大小
- 【android开发】 修改控件Spinner内容的字体大小 颜色等属性
- 【android开发】 修改控件Spinner内容的字体大小 颜色等属性
- 修改控件Spinner内容的字体大小 颜色等属性
- 修改控件Spinner内容的字体大小 颜色等属性
- 修改控件Spinner内容的字体大小 颜色等属性
- Android-用style修改AlertDialog修改按钮文字颜色
- ios修改Navigation的标题的颜色,字体大小,背景颜色等
- AlertDialog更改标题颜色,字体等
- AlertDialog更改标题颜色,字体等
- AlertDialog更改标题颜色,字体等
- AlertDialog更改标题颜色,字体等
- AlertDialog更改标题颜色,字体等
- iOS UIAlertController上修改标题(title) 消息(message) 按钮 的字体大小及颜色
- 修改 AlertDialog 中按钮颜色的方法
- vscode 如何生成golang的可执行程序?--go build常用命令
- Java获取时间
- 快速排序
- oracle range分区表增加分区
- 地球上第一款测身高的安卓手机应用——AR 测身高
- Android原生AlertDialog修改标题,内容,按钮颜色,字体大小等
- 简洁全面的 LaTeX 速查表
- jquery实现侧边栏手风琴三级导航菜单demo
- 写一个单利模式吧
- CMake 运行错误could not find CMAKE_ROOT!!!
- Mybatis: resultType和resultMap的区别
- UVA 11404
- ORACLE创建按月和按天的自动递增分区
- 关于前端引入icon图标