最新版本的說明 都會在這裏更新....
最新版本: V2.1.1
github地址: https://github.com/liys666666/LDialog
V1.0版本系列說明,請查看: https://www.jianshu.com/p/8eea6af1dd2a
一. 前言
爲什麼要封裝這個框架呢? 我們目前自定義Dialog的常見方式有:
- 使用系統自帶的.
優點: 快速、簡單、粗暴.
缺點: 比較難看, 很多屬性沒法改, 靈活性非常差. - 使用第三方別人封裝好的常見樣式.
優點: 樣式比系統好看, 快速, 總體比第1種好用.
缺點: 佈局固定, 無法更改, 不夠靈活 - 自定義CustomDialog 繼承 Dialog, 然後在CustomDialog加載自己的佈局, 封裝自己的屬性.
優點: 靈活性非常高, 任何彈窗都可以實現.
缺點: 寫CustomDialog 比較麻煩, 時間上遠超前面兩種方式, 代碼複用性不夠強.
爲了能自定義各種dialog, 又能把節約時間, 所以就出了這個框架
二. 2.0和1.0對比
V1.0版本是直接操作Window, 比如圓角, 背景等,由於Window是系統的, 所以屬性受到一定的限制。
V2.0版本在Window上加了一個自定義View, 我們直接操作這個View就靈活多了, 屬性可以自由擴展.
更新說明:
- 對象創建發生變化
- 新增:最大最小寬高
- 新增:顏色漸變
- 新增:分開設置四個角的圓角
- 新增:內置幾種彈框動畫
- 新增:setTextSize屬性
- 優化:setCancelBtn() 可傳多個ID
- 修復: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. 學習成本低, 只需設置屬性即可, 其它完全不用管