天天看點

Android自定義控件系列(五)—萬能的對話框

轉載請注明出處:http://blog.csdn.net/wangjihuanghun/article/details/57074535

自定義控件有段時間沒更新了,今天給大家帶來一個新的對話框樣式,本着用更少的代碼實作更豐富的功能。

由于對話框對使用者的操作有影響,是以目前app上的對話框用的已經比較少了,但還是有一些比較重要的資訊提示需要使用對話框的樣式,例如版本更新,賬戶異地登陸等。

下面來看自定義對話框的樣式:

Android自定義控件系列(五)—萬能的對話框
Android自定義控件系列(五)—萬能的對話框
Android自定義控件系列(五)—萬能的對話框
Android自定義控件系列(五)—萬能的對話框

這裡面帶來了兩種對話框的樣式,也是比較常見的。以上所有的背景顔色,文字顔色,以及按鈕的點選效果都是可以自定義的。

下面分别看看四種對話框是如何實作的

圖1:

DialogM.Builder builder = new DialogM.Builder(DialogMActivity.this)
        .setTitle("發現新版本V5.4.1")
        .setContent("Version5.4.1\n【更新預設表情】——同步最新表情,聊天更有趣\n" +
                "【資料卡大更新】——全新視覺設計,增加陌生人來源資訊\n" +
                "【消息跳動優化】——滑鼠懸浮在消息清單上時順序不動,再也不怕點錯啦\n" +
                "【收藏預覽更新】——完善圖檔浏覽體驗,優化網頁預覽效果\n" +
                "【更多體驗優化】——群成員清單寬度可調;優化天氣定位政策;優化圖檔檢視器")
        .setStyle(DialogM.STYLE_TIP)
        .setPositiveButton("更新", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(DialogMActivity.this, "submit", Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        })
        .setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(DialogMActivity.this, "cancel", Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
builder.create().show();
           

圖2:

DialogM.Builder builder = new DialogM.Builder(DialogMActivity.this)
        .setTitle("Hello")
        .setTitleBackColor(getResources().getColor(R.color.content))
        .setTitleTextColor(getResources().getColor(R.color.mainColor))
        .setAlertButtonBackColor(getResources().getColor(R.color.mainColor))
        .setAlertButtonTextColor(getResources().getColor(android.R.color.white))
        .setCanceledOnTouchOutside(false)
        .setAlertButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        })
        .setContent("landptf");
builder.create().show();
           

圖3:

DialogM.Builder builder = new DialogM.Builder(DialogMActivity.this)
        .setContent("landptf")
        .setStyle(DialogM.STYLE_TIP)
        .setPositiveButton("submit", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(DialogMActivity.this, "submit", Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        })
        .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(DialogMActivity.this, "cancel", Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
builder.create().show();
           

圖4:

DialogM.Builder builder = new DialogM.Builder(DialogMActivity.this)
        .setAlertButton("", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        })
        .setContent("landptf");
builder.create().show();
           

圖3與圖4完全使用了預設的顔色,我在代碼裡指定了紅色為主色調

所有的操作都是通過鍊式調用,可以根據自己app的風格随意改變顔色。當然了你也可以把代碼下載下傳下來增加更豐富的功能。

源碼比較長,有興趣的童鞋可以點選這裡檢視。

源碼中采用了建造者模式,可以友善鍊式調用,使代碼看起來更簡潔。