CustomDialog——一個多功能、通用、可自定義的Dialog
依賴
compile 'com.github.SiberiaDante:CustomDialog:v1.0.1'
說明
[CustomDialog]
一、一個萬能的通用支持多功能的Dialog,簡單三步即可實現:
1.只需要傳入自定義的CustomDialog布局和需要設置點擊事件的控件的id即可
CustomDialog customDialog=new CustomDialog(this, R.layout.dialog_layout, new int[]{R.id.dialog_sure});
2.CustomDialog按鈕的監聽
customDialog.setOnDialogItemClickListener(new CustomDialog.OnCustomDialogItemClickListener() { @Override public void OnCustomDialogItemClick(CustomDialog dialog, View view) {
switsh(view.getId()){
case:R.id.dialog_sure:
Toast.makeText(MainActivity.this, "確定按鈕被點擊了", Toast.LENGTH_LONG).show();
break;
}
} });
3.CustomDialog顯示與隱藏
customDialog.show();
customDialog.dismiss();
二、如果你想改變CustomDialog的顯示位置、動畫、控制按鈕點擊是否取消顯示CustomDialog,可以使用以下構造
1.改變CustomDialog動畫
/** * @param context * @param layoutResID 自己定義的布局 * @param listenedItems 需要設置點擊事件的資源id * @param animationResId dialog 動畫,如果不使用自己的,則傳0 */ public CustomDialog(Context context, int layoutResID, int[] listenedItems, int animationResId) { super(context, R.style.Custom_Dialog_Style); //dialog的樣式 this.context = context; this.mLayoutResId = layoutResID; this.mListenedItems = listenedItems; this.mAnimationResId = animationResId; }
2. 控制點擊CustomDialog后是否自動取消顯示CustomDialog
/** * @param context * @param layoutResID 自己定義的布局 * @param listenedItems 需要設置點擊事件的資源id * @param isDismiss 按鈕點擊后是否默認取消dialog {@code true}取消 {@code false} 不取消 */ public CustomDialog(Context context, int layoutResID, int[] listenedItems, boolean isDismiss) { super(context, R.style.Custom_Dialog_Style); //dialog的樣式 this.context = context; this.mLayoutResId = layoutResID; this.mListenedItems = listenedItems; this.mIsDismiss = isDismiss; }
3.改變CustomDialog的顯示位置,同時可以控制點擊CustomDialog后是否自動取消顯示CustomDialog
/** * @param context * @param layoutResID 自己定義的布局 * @param listenedItems 需要設置點擊事件的資源id * @param isDismiss 按鈕點擊后是否默認取消dialog {@code true}取消 {@code false} 不取消 * @param position dialog 顯示位置,默認CENTER,不設置時可以傳0 */ public CustomDialog(Context context, int layoutResID, int[] listenedItems, boolean isDismiss, int position) { super(context, R.style.Custom_Dialog_Style); //dialog的樣式 this.context = context; this.mLayoutResId = layoutResID; this.mListenedItems = listenedItems; this.mPosition = position; }
4.可以同時改變CustomDialog動畫、顯示位置、按鈕點擊是否取消顯示CustomDialog
/** * 滿足你各種需求 * * @param context * @param layoutResID 自己定義的布局 * @param listenedItems 需要設置點擊事件的資源id * @param animationResId dialog 動畫,如果不使用自己的,則傳0 * @param isDismiss 按鈕點擊后是否默認取消dialog {@code true}取消 {@code false} 不取消 * @param position dialog 顯示位置,默認CENTER,不設置時可以傳0 */ public CustomDialog(Context context, int layoutResID, int[] listenedItems, int animationResId, boolean isDismiss, int position) { super(context, R.style.Custom_Dialog_Style); //dialog的樣式 this.context = context; this.mLayoutResId = layoutResID; this.mListenedItems = listenedItems; this.mAnimationResId = animationResId; this.mIsDismiss = isDismiss; this.mPosition = position; }
其他幾個常用Dialog,可以直接拿來用,不需要單獨寫布局
1.[EnsureDialog]:確認Dialog
EnsureDialog ensureDialog = new EnsureDialog(this).builder() .setGravity(Gravity.CENTER)//默認居中,可以不設置 .setTitle("這里是一個標題", getResources().getColor(R.color.black))//可以不設置標題顏色,默認系統顏色 .setCancelable(false) .setSubTitle("這是一個副標題") .setIncon(R.mipmap.tip_icon)//不設置圖標,默認沒有圖標 .setNegativeButton("取消", new View.OnClickListener() {//可以選擇設置顏色和不設置顏色兩個方法 @Override public void onClick(View view) { } }) .setPositiveButton("確認", getResources().getColor(R.color.red), new View.OnClickListener() {//可以選擇設置顏色和不設置顏色兩個方法 @Override public void onClick(View view) { ensureDialog.dismiss(); } });
ensureDialog.show();
2.[BottomPopupWindow]:仿IOS底部彈窗Dialog
new BottomPopupWindow(this).builder() .setTitle("選擇").setCancelable(false).setCanceled(true) .addSheetItem("相機", BottomPopupWindow.SheetItemColor.Blue, new BottomPopupWindow.OnSheetItemClickListener() { @Override public void onClick(int which) { } }) ...//可以addSheetItem多個item .addSheetItem("相冊", BottomPopupWindow.SheetItemColor.Blue, new BottomPopupWindow.OnSheetItemClickListener() { @Override public void onClick(int which) { } }).show();
* [EditDialog]:帶EditText確認Dialog
final EditDialog dialog = new EditDialog(this).builder(); dialog.setTitle("可編輯Dialog"); dialog.setCancelable(false); dialog.setNegativeButton("取消", new View.OnClickListener() { @Override public void onClick(View view) { } }); dialog.setPositiveButton("確定", new View.OnClickListener() { @Override public void onClick(View view) { final String msg = dialog.getMsg(); Toast.makeText(MainActivity.this, "輸入內容為:" + msg, Toast.LENGTH_LONG).show(); dialog.dismiss(); } }); dialog.show();
堆碼不易,star支持,萬分感謝
歡迎關注:
Github 地址:https://github.com/SiberiaDante/CustomDialog
[TitleLayout——一個輕松實現標題欄的]
[Android開發必備經典收藏集(整理中)]
[Android開發常備工具整理中]