底部彈出框BottomDialog

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();

github地址

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