添加依赖
compile 'com.flyco.dialog:FlycoDialog_Lib:1.3.2@aar'
开始实现
效果一:
public void show(View view) {
// 进入动画
BounceTopEnter mBasIn = new BounceTopEnter();
// 退出动画
SlideBottomExit mBasOut = new SlideBottomExit();
final NormalDialog dialog = new NormalDialog(this);
dialog.content("是否确定退出程序?") // (必须)内容文案
// .contentGravity(Gravity.CENTER_VERTICAL) // 内容的显示位置,默认为Gravity.CENTER_VERTICAL
// .contentTextColor(Color.RED) // 内容文字的颜色
// .contentTextSize(10) // 内容文字大小,单位sp
// .isTitleShow(true) // 是否显示标题,默认显示
.title("我是标题") // (必须)设置标题,如果不设置标题默认为:“温馨提示”
// .titleTextColor(Color.RED) // 标题颜色
// .titleTextSize(10) // 标题字体大小,单位sp
// .titleLineColor(Color.RED) // 设置标题下方分割线的颜色
// .dividerColor(Color.BLUE) // 设置分隔按钮的线的颜色
// .cornerRadius(5) // 设置弹出的dialog的圆角程度,单位dp,默认值为3
// .bgColor(Color.BLACK) // 设置dialog的背景颜色,默认为:#ffffff(白色)
// .btnTextColor(Color.RED,Color.BLUE) // 设置按钮上字体的颜色
// .btnPressColor(Color.parseColor("#2B2B2B"))// 按钮按下时的颜色
.showAnim(mBasIn) //
.dismissAnim(mBasOut)//
// .widthScale(0.85f)//设置对话框的宽度占屏幕宽度的比例0~1
.show();
dialog.setOnBtnClickL(
new OnBtnClickL() {
@Override
public void onBtnClick() {
Toast.makeText(DialogActivity.this, "点击取消!", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
},
new OnBtnClickL() {
@Override
public void onBtnClick() {
Toast.makeText(DialogActivity.this, "点击确定!", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
}
以上注释掉的代码可根据具体的项目需求做相应的调整。
效果二:
可以发现效果二和效果一的区别主要是标题的显示位置和内容显示位置的变化,效果二中都是居中,所以只需在效果一代码的基础上添加一句即可:
.style(NormalDialog.STYLE_TWO)
效果三:
如果要改变按钮的数量和按钮上面的文案,也很简单如下:
final NormalDialog dialog = new NormalDialog(mContext);
dialog.content("你今天的抢购名额已用完~")//
.btnNum(1)
.btnText("继续逛逛")//
.showAnim(mBasIn)//
.dismissAnim(mBasOut)//
.show();
dialog.setOnBtnClickL(new OnBtnClickL() {
@Override
public void onBtnClick() {
T.showShort(mContext, "middle");
dialog.dismiss();
}
});
同理如果是三个的话:
final NormalDialog dialog = new NormalDialog(mContext);
dialog.content("你今天的抢购名额已用完~")//
.style(NormalDialog.STYLE_TWO)// 标题和内容已居中
.btnNum(3)
.btnText("取消", "确定", "继续逛逛")// 注意对应顺序
.showAnim(mBasIn)//
.dismissAnim(mBasOut)//
.show();
dialog.setOnBtnClickL(
new OnBtnClickL() {
@Override
public void onBtnClick() {
T.showShort(mContext, "left");
dialog.dismiss();
}
},
new OnBtnClickL() {
@Override
public void onBtnClick() {
T.showShort(mContext, "right");
dialog.dismiss();
}
},
new OnBtnClickL() {
@Override
public void onBtnClick() {
T.showShort(mContext, "middle");
dialog.dismiss();
}
});
效果4:
private void MaterialDialogDefault() {
final MaterialDialog dialog = new MaterialDialog(mContext);
dialog.content(
"嗨!这是一个 MaterialDialogDefault. 它非常方便使用,你只需将它实例化,这个美观的对话框便会自动地显示出来。"
+ "它简洁小巧,完全遵照 Google 2014 年发布的 Material Design 风格,希望你能喜欢它!^ ^")//
.btnText("取消", "确定")//
.showAnim(mBasIn)//
.dismissAnim(mBasOut)//
.show();
dialog.setOnBtnClickL(
new OnBtnClickL() {//left btn click listener
@Override
public void onBtnClick() {
T.showShort(mContext, "left");
dialog.dismiss();
}
},
new OnBtnClickL() {//right btn click listener
@Override
public void onBtnClick() {
T.showShort(mContext, "right");
dialog.dismiss();
}
}
);
}
效果5:
private void MaterialDialogOneBtn() {
final MaterialDialog dialog = new MaterialDialog(mContext);
dialog.btnNum(1)
.content("为保证咖啡豆的新鲜度和咖啡的香味,并配以特有的传统烘焙和手工冲。")//
.btnText("确定")//
.showAnim(mBasIn)//
.dismissAnim(mBasOut)//
.show();
dialog.setOnBtnClickL(new OnBtnClickL() {
@Override
public void onBtnClick() {
T.showShort(mContext, "middle");
dialog.dismiss();
}
});
}
效果6:
private void MaterialDialogThreeBtns() {
final MaterialDialog dialog = new MaterialDialog(mContext);
dialog.isTitleShow(false)//
.btnNum(3)
.content("为保证咖啡豆的新鲜度和咖啡的香味,并配以特有的传统烘焙和手工冲。")//
.btnText("确定", "取消", "知道了")//
.showAnim(mBasIn)//
.dismissAnim(mBasOut)//
.show();
dialog.setOnBtnClickL(
new OnBtnClickL() {//left btn click listener
@Override
public void onBtnClick() {
T.showShort(mContext, "left");
dialog.dismiss();
}
},
new OnBtnClickL() {//right btn click listener
@Override
public void onBtnClick() {
T.showShort(mContext, "right");
dialog.dismiss();
}
}
,
new OnBtnClickL() {//middle btn click listener
@Override
public void onBtnClick() {
T.showShort(mContext, "middle");
dialog.dismiss();
}
}
);
}
效果7:
private ArrayList<DialogMenuItem> mMenuItems = new ArrayList<>();
mMenuItems.add(new DialogMenuItem("收藏", R.mipmap.ic_winstyle_favor));
mMenuItems.add(new DialogMenuItem("下载", R.mipmap.ic_winstyle_download));
mMenuItems.add(new DialogMenuItem("分享", R.mipmap.ic_winstyle_share));
mMenuItems.add(new DialogMenuItem("删除", R.mipmap.ic_winstyle_delete));
mMenuItems.add(new DialogMenuItem("歌手", R.mipmap.ic_winstyle_artist));
mMenuItems.add(new DialogMenuItem("专辑", R.mipmap.ic_winstyle_album));
private void NormalListDialog() {
final NormalListDialog dialog = new NormalListDialog(mContext, mMenuItems);
dialog.title("请选择")//
.showAnim(mBasIn)//
.dismissAnim(mBasOut)//
.show();
dialog.setOnOperItemClickL(new OnOperItemClickL() {
@Override
public void onOperItemClick(AdapterView<?> parent, View view, int position, long id) {
T.showShort(mContext, mMenuItems.get(position).mOperName);
dialog.dismiss();
}
});
}
效果8:
private void NormalListDialogCustomAttr() {
final NormalListDialog dialog = new NormalListDialog(mContext, mMenuItems);
dialog.title("请选择")//
.titleTextSize_SP(18)//
.titleBgColor(Color.parseColor("#409ED7"))//
.itemPressColor(Color.parseColor("#85D3EF"))//
.itemTextColor(Color.parseColor("#303030"))//
.itemTextSize(14)//
.cornerRadius(0)//
.widthScale(0.8f)//
.show(R.style.myDialogAnim);
dialog.setOnOperItemClickL(new OnOperItemClickL() {
@Override
public void onOperItemClick(AdapterView<?> parent, View view, int position, long id) {
T.showShort(mContext, mMenuItems.get(position).mOperName);
dialog.dismiss();
}
});
}
效果9:
private void NormalListDialogNoTitle() {
final NormalListDialog dialog = new NormalListDialog(mContext, mMenuItems);
dialog.title("请选择")//
.isTitleShow(false)//
.itemPressColor(Color.parseColor("#85D3EF"))//
.itemTextColor(Color.parseColor("#303030"))//
.itemTextSize(15)//
.cornerRadius(2)//
.widthScale(0.75f)//
.show();
dialog.setOnOperItemClickL(new OnOperItemClickL() {
@Override
public void onOperItemClick(AdapterView<?> parent, View view, int position, long id) {
T.showShort(mContext, mMenuItems.get(position).mOperName);
dialog.dismiss();
}
});
}
效果10:
private void ActionSheetDialog() {
final String[] stringItems = {"接收消息并提醒", "接收消息但不提醒", "收进群助手且不提醒", "屏蔽群消息"};
final ActionSheetDialog dialog = new ActionSheetDialog(mContext, stringItems, null);
dialog.title("选择群消息提醒方式\r\n(该群在电脑的设置:接收消息并提醒)")//
.titleTextSize_SP(14.5f)//
.show();
dialog.setOnOperItemClickL(new OnOperItemClickL() {
@Override
public void onOperItemClick(AdapterView<?> parent, View view, int position, long id) {
T.showShort(mContext, stringItems[position]);
dialog.dismiss();
}
});
}
效果11:
private void ActionSheetDialogNoTitle() {
final String[] stringItems = {"版本更新", "帮助与反馈", "退出QQ"};
final ActionSheetDialog dialog = new ActionSheetDialog(mContext, stringItems, mElv);
dialog.isTitleShow(false).show();
dialog.setOnOperItemClickL(new OnOperItemClickL() {
@Override
public void onOperItemClick(AdapterView<?> parent, View view, int position, long id) {
T.showShort(mContext, stringItems[position]);
dialog.dismiss();
}
});
}
自定义Dialog样式
步骤一:继承BaseDialog(或者BottomBaseDialog或者TopBaseDialog)
步骤二:在onCreateView方法填充布局和查找控件
步骤三:在setUiBeforShow方法中做一些逻辑操作,例如设置数据,设置监听之类
示例如下:
public class CustomBaseDialog extends BaseDialog<CustomBaseDialog> {
private TextView tv_cancel;
private TextView tv_exit;
public CustomBaseDialog(Context context) {
super(context);
}
@Override
public View onCreateView() {
widthScale(0.85f);
showAnim(new Swing());
// dismissAnim(this, new ZoomOutExit());
View inflate = View.inflate(context, R.layout.dialog_custom_base, null);
tv_cancel = ViewFindUtils.find(inflate, R.id.tv_cancel);
tv_exit = ViewFindUtils.find(inflate, R.id.tv_exit);
inflate.setBackgroundDrawable(
CornerUtils.cornerDrawable(Color.parseColor("#ffffff"), dp2px(5)));
return inflate;
}
@Override
public boolean setUiBeforShow() {
tv_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
tv_exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
return false;
}
}
例如:
public class CustDialog extends BaseDialog<CustDialog> {
public CustDialog(Context context) {
super(context);
}
@Override
public View onCreateView() {
widthScale(0.3f);
// showAnim(new Swing());
dismissAnim(new ZoomOutExit());
View inflate = View.inflate(mContext, R.layout.ll, null);
// 参数1:背景颜色
// 参数2:圆角大小
inflate.setBackgroundDrawable(
CornerUtils.cornerDrawable(Color.parseColor("#55000000"), dp2px(5)));
return inflate;
}
@Override
public void setUiBeforShow() {
}
}
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerInParent="true">
<com.gpf.myglide.AVLoadingIndicatorView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:minHeight="30dp"
app:minWidth="30dp"
app:maxHeight="30dp"
app:maxWidth="30dp"
android:layout_gravity="center_horizontal"
app:indicatorColor="#ff0000"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textColor="#ffffff"
android:layout_marginBottom="5dp"
android:layout_gravity="center_horizontal"
android:text="加载中..."/>
</LinearLayout>
</RelativeLayout>
activity中:
private boolean flag = true;
// 按钮点击事件
public void click(View view) {
CustDialog dialog = new CustDialog(this);
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
if(flag){
dialog.show();
flag = false;
}else{
dialog.dismiss();
flag = true;
}
}