原生AlterDialog一句话修改标题、信息、按钮的类型

  • 首先看一下我们创建AlterDialog的步骤
AlertDialog dialog = new AlertDialog.Builder(this)
                .setTitle("标题")
                .setMessage("信息")
                .setNegativeButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                }).setPositiveButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                }).create();
        dialog.show();
  • 下面开始修改标题和信息的style,通过反射实现
    看代码`
 /**
     *
     * @param dialog  
     * @param titleSize  标题大小
     * @param titleColor 标题颜色
     * @param msgSize  信息大小
     * @param msgColor 信息颜色
     */
    private void modifyAlterDialogStyle(AlertDialog dialog, int titleSize, int titleColor, int msgSize, int msgColor) {
        int defaulteTitleSize = 16;
        int defaulteTitleColor = Color.BLACK;
        int defaulteMsgSize = 14;
        int defaulteMsgColor = Color.BLACK;
        if (titleSize<0) {
            titleSize = defaulteTitleSize;
        }
        if (titleColor<0) {
            titleColor = defaulteTitleColor;
        }
        if (msgSize<0) {
            msgSize = defaulteMsgSize;
        }
        if (msgColor<0) {
            msgColor = defaulteMsgColor;
        }
        Field mAlert = null;
        try {
            mAlert = AlertDialog.class.getDeclaredField("mAlert");
            mAlert.setAccessible(true);
            Object mAlertController = null;
            try {
                mAlertController = mAlert.get(dialog);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            //通过反射修改title字体大小和颜色
            Field mTitle = mAlertController.getClass().getDeclaredField("mTitleView");
            mTitle.setAccessible(true);
            TextView mTitleView = null;
            try {
                mTitleView = (TextView) mTitle.get(mAlertController);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            mTitleView.setTextSize(titleSize);
            mTitleView.setTextColor(titleColor);
            //通过反射修改message字体大小和颜色
            Field mMessage = mAlertController.getClass().getDeclaredField("mMessageView");
            mMessage.setAccessible(true);
            TextView mMessageView = null;
            try {
                mMessageView = (TextView) mMessage.get(mAlertController);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            mMessageView.setTextSize(msgSize);
            mMessageView.setTextColor(msgColor);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
    }

方法直接调用就行,传入指定的参数就可以了
注意:AlertDialog样式的修改要在show方法之后进行,否则报错。

 modifyAlterDialogStyle(dialog,18,-1,16,-1);
  • 修改button的style

获取底部按钮的实例

 TextView positive_tv =  dialog.getButton(DialogInterface.BUTTON_POSITIVE);
 TextView negative_tv =  dialog.getButton(DialogInterface.BUTTON_NEGATIVE);

拿到对象后就可以任意的操作了。。。

        positive_tv.setText("内容");
        positive_tv.setTextColor(Color.RED);
        positive_tv.setTextSize(16);

over—–

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值