BottomDialog
日常需求中通常都會有這樣的需求,點擊按鈕會從底部彈出一個對話框,選擇操作。例如分享或者更換頭像彈出對話框。
因此抽空將此功能封裝成庫,方便以後引用。
ScreenShot
Import
Maven
Step 1. Add the JitPack repository to your build file
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Step 2. Add the dependency
<dependency>
<groupId>com.github.SmartCyl</groupId>
<artifactId>BottomDialog</artifactId>
<version>1.0.4</version>
</dependency>
Or Gradle
Step 1. Add the JitPack repository to your build file
Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
compile 'com.github.SmartCyl:BottomDialog:1.0.4'
}
Usage
當不需要圖片時,Item的構造器第一個參數傳0 :new Item(0,”name”)
1、使用前3張圖中類似的效果直接使用自帶的layout文件即可。
new SmartDialog().init(context).items(List<Item>).display();
默認佈局 APIs
方法 | 說明 | 默認值 |
---|---|---|
backgroundRes | 設置背景資源,如圓角(backgroundResEnable爲true時生效) | R.drawable.shape_round_corner |
backgroundResEnable | 是否啓用設置背景資源 | true |
onItemClick | ReciclerView的單擊監聽 | - |
onItemLongClick | ReciclerView的長按監聽 | - |
title | 設置標題 | 標題 |
titleVisible | 是否顯示標題 | true |
titleGravity | 標題顯示位置 | Gravity.CENTER |
titleColor | 標題顏色 | 727272 |
titleSize | 標題字體大小 | 16 |
cancelVisible | 是否顯示取消按鈕 | true |
cancel | 隱藏Dialog | - |
itemOrientation | RecyclerView子項佈局方式(垂直[圖二]/水平[圖一]) | LinearLayout.VERTICAL |
recyclerViewOrientation | RecyclerView排布方式(垂直/Grid[圖二]) | BaseSmartDialog.ORIENTATION_VERTICAL |
spanCount | 列數(recyclerViewOrientation爲GRID時生效) | 3 |
adapter | 設置適配器 | SmartAdapter |
2、使用自定義佈局(如圖四)
new SmartDialog().init(context).layoutRes(layout).display();
共用 APIs
方法 | 說明 | 默認值 |
---|---|---|
items | 設置數據源 | - |
display | 顯示Dialog | - |
layoutRes | 設置自定義佈局 | - |
dialogHeight | 設置Dialog高度 | 包裹內容 |
dialogWidth | 設置Dialog寬度 | 屏幕寬度(若寬度不鋪滿屏幕,調用padding(0)即可) |
padding(padding) | 設置內邊距 | 30 |
padding(l,t,r,b) | 設置內邊距 | 30 |
gravity | Dialog的位置 | Gravity.BOTTOM |
animEnable | 是否啓用Dialog從底部彈出的動畫 | true |
animDuration | Dialog從底部彈出動畫持續時間 | 500ms |
cancelableOutside | 點擊Dialog外部是否可隱藏Dialog | true |
onOutsideClick | 點擊Dialog外部區域事件監聽(用於點擊外部後判斷做什麼操作,設置後點擊外部Dialog不會自動消失,需要調用dialog.cancel()) | - |
dimAmount | 設置陰影部分的灰暗度 | 0.5F |
alpha | 設置Dialog透明度 | 1F |
bindViewListener | 綁定視圖回調(可用於自定義layout的點擊事件監聽) | - |
示例(默認佈局)
new SmartDialog().init(this)
.items(items) // 設置數據源
.title("標題")
.onItemClick(new OnItemClickListener() {
@Override
public void onItemClick(int position, Item item) {
// 單擊回調
}
})
.onItemLongClick(new OnItemLongCli() {
@Override
public void onItemLongClick(int position, Item item){
// 長按回調
}
})
.onOutsideClick(new OutsideClickListener() {
@Override
public void outsideClick(boolean isOutside, BaseSmartDialog dialog) {
dialog.cancle(); // 使對話框消失
// 點擊外部區域監聽
}
})
.backgroundResEnable(true)
.animEnable(false)
.cancelVisible(true)
.titleVisible(true)
.cancelableOutside(true)
.titleGravity(Gravity.CENTER)
.gravity(Gravity.CENTER)
.titleColor(R.color.colorAccent)
.titleSize(20)
.padding(20)
.itemOrientation(LinearLayout.VERTICAL)
.animDuration(400)
.display();
示例(自定義佈局)
new SmartDialog().init(this)
.items(items) // 設置數據源
.onOutsideClick(new OutsideClickListener() {
@Override
public void outsideClick(boolean isOutside, BaseSmartDialog dialog) {
dialog.cancle(); // 使對話框消失
// 點擊外部區域監聽
}
})
// 爲自定義佈局的子控件設監聽
.bindViewListener(new BindViewListener() {
@Override
public void bind(View dialogView, final BaseSmartDialog dialog) {
// xxx爲自定義layout的id
dialogView.findViewById(R.id.xxx).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// do something
dialog.cancel();
}
});
}
});
.animEnable(false)
.cancelableOutside(true)
.gravity(Gravity.CENTER)
.padding(20)
.animDuration(400)
.display();