AlertDialog 修改文本内容的颜色

最近遇到一个问题在联想A858T白色手机上测试如下AlertDialog时,AlertDialog背景默认为白色,title 、message为黑色,但是CheckBox的Text却为白色。


final CheckBox cb = new CheckBox(this);
            cb.setChecked(false);
            cb.setText(getResources().getString(R.string.close_wifi_switch));
            dialog = new AlertDialog.Builder(this)
                    .setTitle(getResources().getString(R.string.exit_wimo_sure))
                    .setView(cb)
                    .setNegativeButton(R.string.cancel,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int whichButton) {
                                    // Do nothing.
                                }
                            })
                    .setPositiveButton(R.string.exit,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int whichButton) {
                                   
                                }
                            }).create();
            dialog.show();

故想到是否可以用反射方法读取到AlertDialog的title颜色值,并将其赋给CheckBox的TextColor,后在网上找到相关的AlertController类,这个类是AlertDialog的实现类,是没有对外公开的,然后在这个类中有个私有成员变量叫mTitleView,这个就是AlertDialog的title的TextView,所以只要得到这个成员变量的实例,即可得到title的颜色值


 dialog.show();// 很重要,在执行下列操作之前一定要先执行
        try {
            Field mAlert = AlertDialog.class.getDeclaredField("mAlert");
            mAlert.setAccessible(true);
            Object alertController = mAlert.get(dialog);
            Field mTitleView = alertController.getClass().getDeclaredField(
                    "mTitleView");
            mTitleView.setAccessible(true);
            TextView title = (TextView) mTitleView.get(alertController);
            ColorStateList colorStateList = title.getTextColors();
            cb.setTextColor(colorStateList);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

类似于修改checkBox的Text颜色,也可以直接修改AlertDialog的title字体颜色,title.setTextColor(XXXXX)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值