Android 萬能Dialog框架, 簡單粗暴, 一行代碼解決

最新版本的說明 都會在這裏更新....

最新版本: V2.1.1

github地址: https://github.com/liys666666/LDialog
V1.0版本系列說明,請查看: https://www.jianshu.com/p/8eea6af1dd2a

一. 前言

爲什麼要封裝這個框架呢? 我們目前自定義Dialog的常見方式有:

  1. 使用系統自帶的.
    優點: 快速、簡單、粗暴.
    缺點: 比較難看, 很多屬性沒法改, 靈活性非常差.
  2. 使用第三方別人封裝好的常見樣式.
    優點: 樣式比系統好看, 快速, 總體比第1種好用.
    缺點: 佈局固定, 無法更改, 不夠靈活
  3. 自定義CustomDialog 繼承 Dialog, 然後在CustomDialog加載自己的佈局, 封裝自己的屬性.
    優點: 靈活性非常高, 任何彈窗都可以實現.
    缺點: 寫CustomDialog 比較麻煩, 時間上遠超前面兩種方式, 代碼複用性不夠強.

爲了能自定義各種dialog, 又能把節約時間, 所以就出了這個框架

二. 2.0和1.0對比

V1.0版本是直接操作Window, 比如圓角, 背景等,由於Window是系統的, 所以屬性受到一定的限制。
V2.0版本在Window上加了一個自定義View, 我們直接操作這個View就靈活多了, 屬性可以自由擴展.

更新說明:

  1. 對象創建發生變化
  2. 新增:最大最小寬高
  3. 新增:顏色漸變
  4. 新增:分開設置四個角的圓角
  5. 新增:內置幾種彈框動畫
  6. 新增:setTextSize屬性
  7. 優化:setCancelBtn() 可傳多個ID
  8. 修復:setOnClickListener中的Id 覆蓋 setCancelBtn()

三. 使用方法

1. 導入項目
//項目根目錄下 build.gradle
allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' } //添加
        }
    }
dependencies {
     implementation 'com.github.liys666666:LDialog:V2.1.1'  //添加
}
2.所有屬性
LDialog dialog = LDialog.newInstance(this, R.layout.dialog_confirm);
        dialog
                .setMaskValue(0.5f) //遮罩--透明度(0-1)
                //1.設置寬
                //精確寬度
                .setWidth(100) //單位:dp
                .setWidthPX(100) //單位:px
                .setWidthRatio(0.8) //佔屏幕寬比例
                //最小寬度
                .setMinWidth(100) //單位:dp
                .setMinWidth(100) //單位:px
                .setMinWidthRatio(0.5) //佔屏幕寬比例
                //最大寬度
                .setMaxWidth(100) //單位:dp
                .setMaxWidthPX(100) //單位:px
                .setMaxWidthRatio(0.8) //佔屏幕寬比例

                //2.設置高
                //精確高度
                .setHeight(100) //單位:dp
                .setHeightPX(100) //單位:px
                .setHeightRatio(0.3) //佔屏幕高比例
                //最小高度
                .setMinHeight(100) //單位:dp
                .setMinHeightPX(100) //單位:px
                .setMinHeightRatio(0.3) //佔屏幕高比例
                //最大高度
                .setMaxHeight(100) //單位:dp
                .setMaxHeightPX(100) //單位:px
                .setMaxHeightRatio(0.3) //佔屏幕高比例

                //3.設置背景
                //顏色
                .setBgColor(Color.WHITE) //一種顏色
                .setBgColor("#FFFFFF") //一種顏色
                .setBgColor(GradientDrawable.Orientation.BOTTOM_TOP, Color.BLUE, Color.YELLOW) //顏色漸變(可傳多個) 參數1:漸變的方向
                .setBgColor(GradientDrawable.Orientation.BOTTOM_TOP, "#00FEE9", "#008EB4") //顏色漸變(可傳多個)
                .setBgColorRes(R.color.white) //一種顏色(res資源)
                .setBgColorRes(GradientDrawable.Orientation.BOTTOM_TOP, R.color.colorAccent, R.color.colorPrimary) //顏色漸變(可傳多個)
                //圓角
                .setBgRadius(5) //圓角, 單位:dp
                .setBgRadius(5, 5, 0, 0) //圓角, 單位:dp
                .setBgRadiusPX(10) //圓角, 單位:px
                .setBgRadiusPX(10, 10, 10, 10) //圓角, 單位:px

                //4.設置彈框位置
                .setGravity(Gravity.LEFT | Gravity.BOTTOM) //彈框位置
                .setGravity(Gravity.LEFT, 0, 0) //彈框位置(偏移量)

                //5.設置動畫
                //5.1 內置動畫(平移,從各個方向彈出)
                // 對應的值:DEFAULT(漸變) (LEFT TOP RIGHT BOTTOM 平移)  SCALE(縮放)
                .setAnimations(LAnimationsType.LEFT)
                //5.2 自定義動畫
                .setAnimationsStyle(R.style.li_dialog_default) //設置動畫

                //6.設置具體佈局
                //6.1 常見系統View屬性
                .setText(R.id.tv_title, "確定")
                .setTextColor()
                .setTextSize()
                .setTextSizePX()
                .setBackgroundColor()
                .setBackgroundRes()
                .setImageBitmap()
                .setVisible()
                .setGone()
                //6.2 其它屬性
                .setCancelBtn(R.id.tv_cancel, R.id.tv_confirm) //設置按鈕,點擊彈框消失(可以傳多個)
                .setOnClickListener(new LDialog.DialogOnClickListener() { //設置按鈕監聽
                    @Override
                    public void onClick(View v, LDialog customDialog) {
                        customDialog.dismiss();
                    }
                }, R.id.tv_confirm, R.id.tv_cancel)  //可以傳多個
                .show();
3. 補充說明

①:如果自定義View的屬性需要動態設置怎麼辦?

MyView view = getView(@IdRes int viewId) 
view.set屬性

②. 使用內置的動畫, setAnimations(), 對應的值如下:

對應的值 說明
LAnimationsType.DEFAULT 漸變
LAnimationsType.LEFT 從左往右平移
LAnimationsType.TOP 從上往下平移
LAnimationsType.RIGHT 從又往左平移
LAnimationsType.BOTTOM 從下往上平移
LAnimationsType.SCALE 縮放

自定義動畫時間方法:(動畫默認時間是: 200毫秒)
在res/values/strings.xml設置:

<!--    動畫時間(單位:毫秒)-->
    <string name="li_dialog_duration_default">200</string>
    <string name="li_dialog_duration_scale">200</string>
    <string name="li_dialog_duration_left">200</string>
    <string name="li_dialog_duration_top">200</string>
    <string name="li_dialog_duration_right">200</string>
    <string name="li_dialog_duration_bottom">200</string>

③. 自定義動畫, setAnimationsStyle, 需要在res/values/styles.xml 設置, 動畫屬性參考: android動畫《一》補間動畫

      <style name="li_dialog_default" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/li_dialog_default_show</item>  <!--顯示動畫-->
        <item name="android:windowExitAnimation">@anim/li_dialog_default_cancel</item> <!--消失動畫-->
    </style>

四. 總結:

1. 擴展性強. 這個框架只是一個盒子, 裏面都是空的, 喜歡放什麼樣的佈局完全看個人喜歡, 可進行二次封裝成自己喜歡的樣式.
2. 使用方便. 鏈式調用, 屬性明瞭, 不記得一查就可以了.
3. 學習成本低, 只需設置屬性即可, 其它完全不用管

到這裏就結束了, 如有疑問或建議, 可在評論區留言, 如果這個框架對你有幫助, 歡迎star收藏.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章