Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/hss01248/DialogUtil

common used dialog with material style ( in support v7),ios style,get top activity automatically, invoke everywhere (any thread , any window)
https://github.com/hss01248/DialogUtil

alertdialog dialog ios-alert loading material-dialogs progress-dialog util utils

Last synced: 1 day ago
JSON representation

common used dialog with material style ( in support v7),ios style,get top activity automatically, invoke everywhere (any thread , any window)

Lists

README

        

# DialogUtil
material风格(v7支持包中的),ios风格,自动获取顶层activity,可在任意界面弹出,可在任意线程弹出

[![](https://jitpack.io/v/hss01248/DialogUtil.svg)](https://jitpack.io/#hss01248/DialogUtil)

[wiki](https://github.com/hss01248/DialogUtil/wiki)

# 注意点

* 在activity已经resume后再调用,不要在onstart里用,否则可能会不显示. 见[关于dialog,PopupWindow,SoftInputBoard的弹出时机的问题](http://www.jianshu.com/p/bd98cee2854b)
* 如果非要在onstart里,就记得调用setActivity()
* 如果有的国产机不显示,就调用setActivity()
* 不要滥用loadingdialog:

> 注意使用的场景:

```
第一此进入页面,用layout内部的loadingview,有很多statelayout框架,也可以用我的这个:
https://github.com/hss01248/PageStateManager
再次刷新,用刷新头显示刷新状态
局部刷新或点击某按钮访问网络,用loading dialog,不影响页面本身状态,类似web中的ajax请求.

```

# 特性

* **自动获取顶层activity,**无需传入activity也可弹出dialog.如果传入,则指定在此activity弹出.
* 安全,**任意线程**均可调用.
* 类型丰富,包括常用的ios风格dialog和material design风格的dialog,且按钮和文字样式可便捷地修改
* **自定义view**:可以传入自定义的view,定义好事件,本工具负责安全地显示
* 也可以保留iso样式或material 样式的底部按钮和上方title(可隐藏),中间的view可以完全自定义
* 考虑了显示内容超多时的滑动和与屏幕的间隙.
* 也可以设置宽高百分比来**自定义宽高**
* 可以关闭默认的阴影背景,从而能使用xml中**自定义的背景**(弹出自定义view的dialog时常用)
* 支持国际化
* **智能弹出和隐藏软键盘**.自定义view的dialog只要设置setNeedSoftKeyboard为true,即可自动处理软键盘的弹出和隐藏
* ios样式和material 样式的均**可以在三种状态下显示**: 普通dialog,TYPE_TOAST,作为activity.(原生ProgressDialog和Design包下的BottomSheetDialog除外,其在TYPE_TOAST或activity显示有异样)
* 支持带x的**广告样式**的动画

# todo

md 单选多选颜色自定义
progressdialog改成完全自定义的
所有dialog : 增加动画的自定义

选择https://github.com/liangchengcheng/android-loading-dialog中的一些好的效果加进来

# 示例图

https://github.com/hss01248/DialogUtil/wiki/0_types(%E6%89%80%E6%9C%89%E7%9A%84%E7%B1%BB%E5%9E%8B)

# 适配情况

https://github.com/hss01248/DialogUtil/wiki/screen-adapt(%E5%B1%8F%E5%B9%95%E9%80%82%E9%85%8D)

# useage

## 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.hss01248:DialogUtil:lastest release'){
exclude group: 'com.android.support'
       }
        compile 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support:recyclerview-v7:26.1.0'
compile 'com.android.support:design:26.1.0'
//将26.1.0: 改为自己项目中一致的版本
}
```
lastest release: https://github.com/hss01248/DialogUtil/releases

## 初始化

```
//在Application的oncreate方法里:
传入context
StyledDialog.init(this);

在activity生命周期callback中拿到顶层activity引用:
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
ActivityStackManager.getInstance().addActivity(activity);
}

@Override
public void onActivityStarted(Activity activity) {

}

@Override
public void onActivityResumed(Activity activity) {
}

@Override
public void onActivityPaused(Activity activity) {

}

@Override
public void onActivityStopped(Activity activity) {

}

@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

}

@Override
public void onActivityDestroyed(Activity activity) {
ActivityStackManager.getInstance().removeActivity(activity);
}
});

```

## 示例代码(MainActivity里)

```
//使用默认样式时,无须.setxxx:
StyledDialog.buildLoading().show();

//自定义部分样式时:
StyledDialog.buildMdAlert("title", msg, new MyDialogListener() {
@Override
public void onFirst() {
showToast("onFirst");
}

@Override
public void onSecond() {
showToast("onSecond");
}

@Override
public void onThird() {
showToast("onThird");
}

})
.setBtnSize(20)
.setBtnText("i","b","3")
.show();
```

# 相关回调

## MyDialogListener

```
public abstract void onFirst();//md-确定,ios-第一个
public abstract void onSecond();//md-取消,ios-第二个
public void onThird(){}//md-netural,ios-第三个

public void onCancle(){}

/**
* 提供给Input的回调
* @param input1
* @param input2
*/
public void onGetInput(CharSequence input1,CharSequence input2){

}

/**
* 提供给MdSingleChoose的回调
* @param chosen
* @param chosenTxt
*/
public void onGetChoose(int chosen,CharSequence chosenTxt){

}

/**
* 提供给MdMultiChoose的回调
* @param states
*/
public void onChoosen( List selectedIndex, List selectedStrs,boolean[] states){

}
```

## MyItemDialogListener

```
/**
* IosSingleChoose,BottomItemDialog的点击条目回调
* @param text
* @param position
*/
public abstract void onItemClick(CharSequence text, int position);

/**
* BottomItemDialog的底部按钮(经常是取消)的点击回调
*/
public void onBottomBtnClick(){}
```

# 提供的api

### 各类dialog的初始参数传递和回调:StyledDialog.buildxxx:

![methodsofstyledialog](img0/methodsofstyledialog.jpg)

## 自定义样式:setXxx

![methodsofconfig](img0/methodsofconfig.jpg)

## 最后必须调用show(),返回dialog对象

# 对话框的消失

```
StyledDialog.dismiss(DialogInterface... dialogs);
```

## 两个loading对话框不需要对象就可以直接dismisss:

```
StyledDialog.dismissLoading();
```

### progress dialog 的进度更新

```
/**
* 可以在任何线程调用
* @param dialog 传入show方法返回的对象
* @param progress
* @param max
* @param msg 如果是转圈圈,会将msg变成msg:78%的形式.如果是水平,msg不起作用
* @param isHorizontal 是水平线状,还是转圈圈
*/
public static void updateProgress( Dialog dialog, int progress, int max, CharSequence msg, boolean isHorizontal)
```