今天无意间发现了这个东东,是一个基于DialogFragment的扩展,封装的比较好,至于DialogFragment的基本使用,可以参考我之前的一篇文章DialogFragment的使用及利用自定义interface点击事件并解决旋转屏幕点击事件失效问题。下来看看这个
NiceDialog封装的效果如何:
下面来说说如何使用:
Step 1. 添加JitPack仓库 在当前项目等根目录下的 build.gradle 文件中添加如下内容:
allprojects {
repositories {
…
maven { url “https://jitpack.io” }
}
}
Step 2. 添加项目依赖
dependencies {
compile ‘com.github.Othershe:NiceDialog:1.1.1’
}
Step 3. 配置、展示dialog
NiceDialog.init()
.setLayoutId(R.layout.dialog) //设置dialog布局文件
.setConvertListener(new ViewConvertListener() { //进行相关View操作的回调
@Override
public void convertView(ViewHolder holder, final BaseNiceDialog dialog) {
holder.setOnClickListener(R.id.cancel, new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
//如果还有其他监听可以继续添加
}
})
.setDimAmount(0.3f) //调节灰色背景透明度[0-1],默认0.5f
.setShowBottom(true) //是否在底部显示dialog,默认flase
.setMargin() //dialog左右两边到屏幕边缘的距离(单位:dp),默认0dp
.setWidth() //dialog宽度(单位:dp),默认为屏幕宽度
.setHeight() //dialog高度(单位:dp),默认为WRAP_CONTENT
.setOutCancel(false) //点击dialog外是否可取消,默认true
.setAnimStyle(R.style.EnterExitAnimation)//设置dialog进入、退出的动画style(底部显示的dialog有默认动画)
.show(getSupportFragmentManager()); //显示dialog
注意: setMargin()和setWidth()选择一个即可
更多用法:
1、创建一个继承BaseNiceDialog的类,如果需要传参可仿照如下方式,也是就是常用的Fragment传参方式
public static class ConfirmDialog extends BaseNiceDialog {
private String type;
public static ConfirmDialog newInstance(String type) {
Bundle bundle = new Bundle();
bundle.putString("type", type);
ConfirmDialog dialog = new ConfirmDialog();
dialog.setArguments(bundle);
return dialog;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
if (bundle == null) {
return;
}
type = bundle.getString("type");
}
@Override
public int intLayoutId() {
return R.layout.confirm_layout;
}
@Override
public void convertView(ViewHolder holder, final BaseNiceDialog dialog) {
if ("1".equals(type)) {
holder.setText(R.id.title, "提示");
holder.setText(R.id.message, "您已支付成功!");
} else if ("2".equals(type)) {
holder.setText(R.id.title, "警告");
holder.setText(R.id.message, "您的账号已被冻结!");
}
holder.setOnClickListener(R.id.cancel, new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
holder.setOnClickListener(R.id.ok, new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
}
}
2、展示dialog
public void showDialog5(View view) {
ConfirmDialog.newInstance("1")
.setMargin(60)
.setOutCancel(false)
.show(getSupportFragmentManager());
}
public void showDialog6(View view) {
ConfirmDialog.newInstance("2")
.setMargin(60)
.setOutCancel(false)
.show(getSupportFragmentManager());
}