github地址: https://github.com/liys666666/LDialog
最新版說明:https://www.jianshu.com/p/4ab3462b3056
一. 前言
爲什麼要封裝這個框架呢? 我們目前自定義Dialog的常見方式有:
- 使用系統自帶的.
優點: 快速、簡單、粗暴.
缺點: 比較難看, 很多屬性沒法改, 靈活性非常差. - 使用第三方別人封裝好的常見樣式.
優點: 樣式比系統好看, 快速, 總體比第1種好用.
缺點: 佈局固定, 無法更改, 不夠靈活 - 自定義CustomDialog 繼承 Dialog, 然後在CustomDialog加載自己的佈局, 封裝自己的屬性.
優點: 靈活性非常高, 任何彈窗都可以實現.
缺點: 寫CustomDialog 比較麻煩, 時間上遠超前面兩種方式, 代碼複用性不夠強.
爲了能自定義各種dialog, 又能把節約時間, 所以就出了這個框架
二. 使用方法
1. 導入項目
//項目根目錄下 build.gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' } //添加
}
}
dependencies {
implementation 'com.github.liys666666:LDialog:V1.0.4' //添加
}
2.所有屬性
LDialog dialog = new LDialog(this, R.layout.dialog_confirm).with(); //你的佈局
dialog
.setMaskValue(0.5f) //遮罩--透明度
//1.設置寬
.setWidth() //單位:dp
.setWidthPX() //單位:px
.setWidthRatio(0.8) //佔屏幕寬比例
//2.設置高
.setHeight() //單位:dp
.setHeightPX() //單位:px
.setHeightRatio() //佔屏幕高比例
//3.設置背景
.setBgColor(Color.WHITE) //背景顏色
.setBgColorRes(R.color.white) //res資源
.setBgRadius() //圓角, 單位:dp
.setBgRadiusPX() //圓角, 單位:px
//4.設置彈框位置 和 動畫(顯示和隱藏動畫)
.setGravity(Gravity.TOP | Gravity.BOTTOM) //設置彈框位置
.setGravity(Gravity.LEFT, 0, 0) //設置彈框位置(偏移量)
.setAnimationsStyle(R.style.dialog_translate) //設置動畫
//5.設置具體佈局
//5.1 常見系統View屬性
.setText(R.id.tv_title, "確定")
.setTextColor()
.setBackgroundColor()
.setBackgroundRes()
.setImageBitmap()
.setVisible()
.setGone()
//5.2 其它屬性
.setCancelBtn(R.id.tv_cancel) //設置按鈕,彈框消失的按鈕
.setOnClickListener(new LDialog.DialogOnClickListener() { //設置按鈕監聽
@Override
public void onClick(View v, LDialog customDialog) {
customDialog.dismiss();
}
}, R.id.tv_confirm, R.id.tv_cancel) //可以傳多個
.show(); //顯示
3. 使用說明
①. 簡單使用(主要佈局屬性)
步驟1: new對象, 加載你的佈局
步驟2: with初始化
步驟3: 設置控件的屬性
步驟4: show()
如果有額外需求, 可用dialog.getView(viewId)獲取對應的控件, 隨便怎麼設置都可以
LDialog dialog = new LDialog(this, R.layout.dialog_confirm); //設置你的佈局
dialog.with()
//設置佈局控件的各種屬性
.setText(R.id.tv_content, "確定要退出登錄嗎?")
.setCancelBtn(R.id.tv_cancel) //點擊對應按鈕, dialog會消失(可選)
.setOnClickListener(new LDialog.DialogOnClickListener() { //設置監聽
@Override
public void onClick(View v, LDialog lDialog) { //可以根據viewId判斷
lDialog.dismiss();
}
}, R.id.tv_confirm, R.id.tv_content) //可以設多控件
.show();
結果如下圖:
②. dialog本身的屬性:
dialog.with()
//1.設置寬
.setWidth() //單位:dp
.setWidthPX() //單位:px
.setWidthRatio(0.8) //佔屏幕寬比例
//2.設置高
.setHeight() //單位:dp
.setHeightPX() //單位:px
.setHeightRatio() //佔屏幕高比例
//3.設置背景
.setBgColor(Color.WHITE) //背景顏色
.setBgColorRes(R.color.white) //res資源
.setBgRadius() //圓角, 單位:dp
.setBgRadiusPX() //圓角, 單位:px
//4.設置彈框位置 和 動畫(顯示和隱藏動畫)
.setGravity(Gravity.TOP | Gravity.BOTTOM) //設置彈框位置
.setGravity(Gravity.LEFT, 0, 0) //設置彈框位置(偏移量)
.setAnimationsStyle(R.style.dialog_translate) //設置動畫
說明: 對於動畫屬性, setAnimationsStyle, 需要在res/values/styles.xml 設置, 動畫屬性參考: android動畫《一》補間動畫
<style name="dialog_alpha" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/dialog_alpha_show</item> <!--顯示動畫-->
<item name="android:windowExitAnimation">@anim/dialog_alpha_cancel</item> <!--消失動畫-->
</style>
<style name="dialog_translate" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/dialog_translate_show</item> <!--顯示動畫-->
<item name="android:windowExitAnimation">@anim/dialog_translate_cancel</item> <!--消失動畫-->
</style>
三. 總結:
1. 擴展性強. 這個框架只是一個盒子, 裏面都是空的, 喜歡放什麼樣的佈局完全看個人喜歡, 可進行二次封裝成自己喜歡的樣式.
2. 使用方便. 鏈式調用, 屬性明瞭, 不記得一查就可以了.
3. 學習成本低, 只需設置屬性即可, 其它完全不用管