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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csdn_mm/article/details/80693332
  • 首先看一下我们创建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—–

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页