Android AlertDialog修改标题、内容、按钮的字体大小和字体颜色

简介: Android AlertDialog修改标题、内容、按钮的字体大小和字体颜色

有两种方案:

1、自定义contentView,大小颜色什么的直接在xml文件中写好就ok。

2、在原生的基础上做一些修改。

这里主要说的是第二种方案


效果图对比




先看一下修改前的代码

AlertDialog builder = new AlertDialog.Builder(Activity.this)
                .setTitle("这是标题")
                .setMessage("这是内容")
                .setPositiveButton("确定", null)
                .setNegativeButton("取消", null)
                .show();

很简单。

这时候点开AlertDialog查看源码,构造方法以下就是get set 方法了,可以看到一个getButton方法

image.png

这里的返回是一个button,看注释,可以返回 “确定取消” 按钮,那既然得到button对象了,大小颜色什么的自然可以直接set了。


ok,继续往下看,可以看到一个重写的setTitle方法,

image.png

注意这里是引用的一个mAlert对象,且调用它的setTitle方法,ok,点进去这个setTitle方法查看究竟。

image.png



诶,这里的代码看起来是不是很熟悉了,跟平常的从xml文件获取控件然后设置属性一样的嘛。

找到mTitleView的声明,

image.png

诶,旁边就是mMessageView,查找引用,果然就是setMessage方法

image.png


ok,至此,已经很简单了,我们需要通过mAlert对象去获取mTitleView和mMessageView,然后就可以设置大小和颜色了。

这里就需要用到反射的知识去拿到mAlert对象了。


看代码:


AlertDialog builder = new AlertDialog.Builder(Activity.this)
                .setTitle("这是标题")
                .setMessage("这是内容")
                .setPositiveButton("确定", null)
                .setNegativeButton("取消", null)
                .show();
        /修改 确定取消 按钮的字体大小
        builder.getButton(AlertDialog.BUTTON_POSITIVE).setTextSize(26);
        builder.getButton(DialogInterface.BUTTON_NEGATIVE).setTextSize(26);
        try {
            //获取mAlert对象
            Field mAlert = AlertDialog.class.getDeclaredField("mAlert");
            mAlert.setAccessible(true);
            Object mAlertController = mAlert.get(builder);
            //获取mTitleView并设置大小颜色
            Field mTitle = mAlertController.getClass().getDeclaredField("mTitleView");
            mTitle.setAccessible(true);
            TextView mTitleView = (TextView) mTitle.get(mAlertController);
            mTitleView.setTextSize(40);
            mTitleView.setTextColor(Color.YELLOW);
            //获取mMessageView并设置大小颜色
            Field mMessage = mAlertController.getClass().getDeclaredField("mMessageView");
            mMessage.setAccessible(true);
            TextView mMessageView = (TextView) mMessage.get(mAlertController);
            mMessageView.setTextColor(Color.RED);
            mMessageView.setTextSize(30);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }

在show之后,我们可以直接获取button对象,然后通过反射获取title 和 message对象,然后设置颜色和大小。



其他功能可以自己探索源码。

目录
相关文章
|
存储 消息中间件 人工智能
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
374 3
|
API Android开发 开发者
Android颜色渐变动画效果的实现
本文介绍了在Android中实现颜色渐变动画效果的方法,重点讲解了插值器(TypeEvaluator)的使用与自定义。通过Android自带的颜色插值器ArgbEvaluator,可以轻松实现背景色的渐变动画。文章详细分析了ArgbEvaluator的核心代码,并演示了如何利用Color.colorToHSV和Color.HSVToColor方法自定义颜色插值器MyColorEvaluator。最后提供了完整的源码示例,包括ColorGradient视图类和MyColorEvaluator类,帮助开发者更好地理解和应用颜色渐变动画技术。
535 3
|
Java Android开发
Android背景颜色滑动渐变效果(上下滑动,左右滑动)
本文分享了一种通过ScrollView实现滑动变色效果的简单方法。主要步骤包括:1) 在布局中添加ScrollView并确保内容可滑动;2) 获取屏幕高度;3) 获取控件高度;4) 使用GradientDrawable设置渐变颜色;5) 根据控件与屏幕高度比例动态调整颜色数量。示例代码展示了如何在滑动时根据比例改变背景颜色,实现流畅的视觉效果。
457 0
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
387 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
Android开发 开发者
Android自定义view获取attr中自定义颜色的问题
本文针对Android自定义View在布局中设置颜色时遇到的问题进行分析与解决。问题表现为通过`getAttributeIntValue`方法获取颜色时,使用资源引用(如`@color/colorPrimary`)无法正确获取,而直接使用十六进制颜色值(如`#ff0000`)则正常。经过源码分析,发现是属性格式定义及获取方式不当导致。解决方案为将`attrs`文件中颜色属性的格式改为`reference|color`,并使用`TypedArray`的`getColor`方法获取颜色值,确保资源引用和直接颜色值均能正确解析。希望本文能帮助遇到类似问题的开发者。
358 0
|
XML IDE 开发工具
【Android UI】自定义带按钮的标题栏
【Android UI】自定义带按钮的标题栏
327 7
【Android UI】自定义带按钮的标题栏
|
Android开发
Android经典实战之Textview文字设置不同颜色、下划线、加粗、超链接等效果
本文介绍了 `SpannableString` 在 Android 开发中的强大功能,包括如何在单个字符串中应用多种样式,如颜色、字体大小、风格等,并提供了详细代码示例,展示如何设置文本颜色、添加点击事件等,助你实现丰富文本效果。
1539 4
|
API Android开发
Android使用AlertDialog实现弹出菜单
本文分享了在Android开发中使用AlertDialog实现弹出菜单的方法,并通过代码示例和错误处理,展示了如何避免因资源ID找不到导致的crash问题。
433 1
|
Android开发 开发者
Android UI设计中,Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等,定义在`styles.xml`。
【6月更文挑战第26天】Android UI设计中,Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等,定义在`styles.xml`。要更改主题,首先在该文件中创建新主题,如`MyAppTheme`,覆盖所需属性。然后,在`AndroidManifest.xml`中应用主题至应用或特定Activity。运行时切换主题可通过重新设置并重启Activity实现,或使用`setTheme`和`recreate()`方法。这允许开发者定制界面并与品牌指南匹配,或提供多主题选项。
584 6
|
Android开发
Android面试题经典之如何全局替换App的字体
在Android应用中替换字体有全局和局部方法。全局替换涉及在`Application`的`onCreate`中设置自定义字体,并创建新主题。局部替换则可在布局中通过`ResourcesCompat.getFont()`加载字体文件并应用于`TextView`。
606 2

热门文章

最新文章