Android 開發 MaterialDialog框架的詳解


前言

  開始之前還是需要廢話一下,因為有一些坑需要告知。首先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;

    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM