原生AlterDialog一句話修改標題、資訊、按鈕的型別
阿新 • • 發佈:2019-02-01
- 首先看一下我們建立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—–