安卓项目实战之强大的Dialog对话框库FlycoDialog-Master

添加依赖

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;
        }
    }
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
带有各种动画效果的弹出对话框控件。你也可以自定义样式及弹出动画。效果非常棒,且使用简单。项目地址:https://github.com/H07000223/FlycoDialog_Master 效果图:        依赖的文件:   FlycoAnimation_Lib   FlycoDialog_Lib   nineoldandroids这三个文件都可以使用jar包:FlycoAnimation_Lib-v1.0.0.jarFlycoDialog_Lib-v1.0.0.jarnineoldandroids-2.4.0.jar  但是目前生成的jar包与源文件不一致,建议还是想我demo中那样使用源文件或者你自己生成jar包如何使用一个最简单的使用:final NormalDialog dialog = new NormalDialog(context);//创建对话框实例 dialog.content("是否确定退出程序?")//设置对话框内容                 .showAnim(bas_in)//设置弹出动画                 .dismissAnim(bas_out)//设置关闭动画                 .show(); dialog.setOnBtnClickL(//设置按钮监听                 new OnBtnClickL() {                     @Override                     public void onBtnClick() {                         T.showShort(context, "left");                         dialog.dismiss();                     }                 },                 new OnBtnClickL() {                     @Override                     public void onBtnClick() {                         T.showShort(context, "right");                         dialog.dismiss();                     }                 });
好的,我可以为您提供关于Android对话框封装的相关知识。 对话框是Android应用程序中常用的一种UI控件,可以用于显示一些重要的提示信息或用户交互操作。在Android开发中,我们可以通过Dialog类来创建对话框。下面是一个简单的示例: ``` AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("提示"); builder.setMessage("确定要删除吗?"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 点击确定按钮后的操作 } }); builder.setNegativeButton("取消", null); AlertDialog dialog = builder.create(); dialog.show(); ``` 通过AlertDialog.Builder类,我们可以设置对话框的标题、消息内容、按钮等属性,并通过create()方法创建对话框对象,最后通过show()方法显示对话框。 除了上面的例子,还有很多不同类型的对话框,比如进度条对话框、自定义对话框等。在这里,我将为你介绍如何创建一个缓冲对话框,并封装成一个工具类。 首先,创建一个名为ProgressDialogUtil的工具类,代码如下: ``` public class ProgressDialogUtil { private static ProgressDialog progressDialog; public static void showProgressDialog(Context context, String message) { if (progressDialog == null) { progressDialog = new ProgressDialog(context); progressDialog.setCancelable(false); progressDialog.setCanceledOnTouchOutside(false); } progressDialog.setMessage(message); progressDialog.show(); } public static void hideProgressDialog() { if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); progressDialog = null; } } } ``` 在这个工具类中,我们定义了两个静态方法:showProgressDialog()和hideProgressDialog()。showProgressDialog()方法用于显示缓冲对话框,hideProgressDialog()方法用于隐藏缓冲对话框。 在showProgressDialog()方法中,我们首先判断progressDialog是否为空,如果为空则创建一个ProgressDialog对象,并设置对话框的一些属性,比如不可取消、不可触摸外部等。然后设置对话框的消息内容,并显示对话框。 在hideProgressDialog()方法中,我们判断progressDialog是否为空并且正在显示,如果是,则关闭对话框并将progressDialog置为null。 使用这个工具类也非常简单,只需要在需要显示缓冲对话框的地方调用showProgressDialog()方法即可。比如: ``` ProgressDialogUtil.showProgressDialog(this, "正在加载中..."); ``` 当数据加载完成后,调用hideProgressDialog()方法即可隐藏缓冲对话框。 希望这个例子能够帮助你更好地理解如何创建和封装Android对话框
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智玲君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值