前言
開始之前還是需要廢話一下,因為有一些坑需要告知。首先MaterialDialog在GitHub上作者已經轉型使用100% Kotlin語言編寫,雖然可以在Java里調用Kotlin使用。但是個人暫時不想接觸,所以依然會使用老版本的MaterialDialog。Java最后的版本是0.9.6.0版本,所以我們以這個版本為例子記錄一些平時個人用到的例子。另外不需要太擔心高版本無法適配,目前在Android 9.0版本依然效果良好。
作者的GitHub地址:https://github.com/afollestad/material-dialogs
使用參考博客:https://blog.csdn.net/u010904027/article/details/53535590
依賴
implementation 'com.afollestad.material-dialogs:core:0.9.6.0'
代碼例子
等待彈窗例子
/** * 等待彈窗1 */ public void waitFor1() { MaterialDialog waitForDialog = new MaterialDialog.Builder(this) .content("正在登入...") .progress(true,-1)//等待圖標 true=圓形icon false=進度條 .canceledOnTouchOutside(false)//點擊外部不取消對話框 .build(); waitForDialog.show(); } /** * 等待彈窗2 */ @Override public void waitFor2() { MaterialDialog waitForDialog = new MaterialDialog.Builder(this) .content("正在登入...") .progress(true,-1)//等待圖標 true=圓形icon false=進度條 .cancelable(false)//不會被取消 (包括返回鍵和外部點擊都無法取消) .build(); waitForDialog.show(); }
普通對話框例子
public void dialog() { MaterialDialog dialog = new MaterialDialog.Builder(this) .title("提示")//標題 .content("您未添加人臉識別,請點擊確定錄入")//內容 .icon(getResources().getDrawable(R.mipmap.ic_logo,null))//圖標 .positiveText("確定") //肯定按鍵 .neutralText("稍后詢問") //中性按鍵 .negativeText("取消") //否定按鍵 .cancelable(true) .onPositive(new MaterialDialog.SingleButtonCallback() { //監聽肯定按鍵 @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { } }) .onNeutral(new MaterialDialog.SingleButtonCallback() { //監聽中性按鍵 @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { } }) .onNegative(new MaterialDialog.SingleButtonCallback() { //監聽否定按鍵 @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { } }) .onAny(new MaterialDialog.SingleButtonCallback() {//三個按鍵一起監聽 @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { switch (which){ case POSITIVE: break; case NEUTRAL: break; case NEGATIVE: break; } //或者這樣 // if (DialogAction.POSITIVE == which){ // // } } }) .build(); dialog.show(); }
單選列表對話框例子
private void singleElectionDialog(){ int [] itemId = {101,102,103,104,105}; String [] contentArray = {"一","二","三","四","五"}; MaterialDialog materialDialog = new MaterialDialog.Builder(this) .items(contentArray)//添加item內容數組 .itemsIds(itemId)//添加item的id .itemsCallback(new MaterialDialog.ListCallback() { //點擊回調 @Override public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) { Log.e("test", "onSelection: id="+itemView.getId() ); } }) .build(); materialDialog.show(); }
效果圖:
RecyclerView實現單選列表例子
MaterialDialog materialDialog = new MaterialDialog.Builder(this) .title("標題") .adapter(mRecyclerViewAdapter,new LinearLayoutManager(this)) .positiveText(R.string.cancel) .build(); materialDialog.show();
注意這里的.adapter(mRecyclerViewAdapter,new LinearLayoutManager(this)), 適配器一定是RecyclerView的,不能使用ListView,而new LinearLayoutManager(this) 其實就是RecyclerView 布局方向參數.
item點擊監聽,請參考RecyclerView的具體用法,直接在適配器里實現點擊監聽.
輸入框
private static MaterialDialog tipsDialog(Context context) { MaterialDialog tipsDialog = new MaterialDialog.Builder(context) .title("進入開發模式") .input("請輸入密碼", "", new MaterialDialog.InputCallback() { @Override public void onInput(@NonNull MaterialDialog dialog, CharSequence input) { } }) .cancelable(false) .positiveText("確定") .negativeText("取消") .onPositive(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { L.e("輸入的密碼內容=" + dialog.getInputEditText().getText().toString()); if (TextUtils.isEmpty(dialog.getInputEditText().getText().toString())) { Toast.makeText(context, "您沒有輸入密碼", Toast.LENGTH_SHORT).show(); dialog.dismiss(); dialog = null; return; } if (!dialog.getInputEditText().getText().toString().equals(PASSWORD)) { Toast.makeText(context, "密碼錯誤", Toast.LENGTH_SHORT).show(); dialog.dismiss(); dialog = null; return; } Toast.makeText(context, "密碼正確", Toast.LENGTH_SHORT).show(); dialog.dismiss(); dialog = null; } }) .onNegative(new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { dialog.dismiss(); dialog = null; } }) .build(); return tipsDialog; }