1. 程式人生 > >原生AlterDialog一句話修改標題、資訊、按鈕的型別

原生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—–