栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android 自定义Dialog实现(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android 自定义Dialog实现(二)

        在之前的文章中介绍了自定Dialog的实现方法之一:https://blog.csdn.net/m0_57487205/article/details/124775019?spm=1001.2014.3001.5501https://blog.csdn.net/m0_57487205/article/details/124775019?spm=1001.2014.3001.5501      这篇文章记录一下另外一种实现自定义Dialog的方法:

首先创建一个自己的MyDialog类集成Dialog,集成Dialog 之后会爆红,只需要按Alt+insert键快捷插入构造方法即可,然后需要重写onCreate()方法,在onCreate()方法中通过setContentView(R.layout.dialog_layout)方法指定弹窗需要显示的layout布局,布局可以随便自定义:

1、MyDialog代码:

public class MyDialog extends Dialog {

    public MyDialog(@NonNull Context context, int themeResId) {
        super(context, themeResId);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_layout);
    }

}

2:dialog_layout.xml:




    

        

        

        

         编写好布局文件后就可以对一些逻辑进行整理了,类似于Activity,在onCreate()方法中就可以执行findViewById()操作了,接着就是弹窗按钮的点击时间监听,实现链式编程,一定程度上简化了弹窗的调用流程,下面是完整的MyDialog代码:

public class MyDialog extends Dialog {
    private Button button_no;
    private Button button_yes;
    private String title = "title";
    private String message = "message";
    private DialogClickListener listener;

    
    public MyDialog(@NonNull Context context, int themeResId) {
        super(context, themeResId);
    }

    
    public MyDialog setTitle(String title) {
        this.title = title;
        return this;
    }

    
    public MyDialog setMessage(String message) {
        this.message = message;
        return this;
    }

    
    public MyDialog setClickListener(DialogClickListener listener) {
        this.listener = listener;
        return this;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_layout);
        button_no = findViewById(R.id.no);
        button_yes = findViewById(R.id.yes);
        TextView textView_title = findViewById(R.id.textView);
        TextView textView_message = findViewById(R.id.message);
        textView_title.setText(title);
        textView_message.setText(message);
        initListener();
    }

    private void initListener() {
        button_no.setOnClickListener(view -> {
            if (null != listener)
                listener.onNO();//接口回调
            dismiss();
        });
        button_yes.setOnClickListener(view -> {
            if (null != listener)
                listener.onYes();//接口回调
            dismiss();
        });
    }

    public interface DialogClickListener {
        void onYes();

        void onNO();
    }

}

    由于在使用弹窗的时候,调用者需要监听用户到底点了弹窗中的哪一些按钮,或者执行了什么操作,所以需要一个弹窗的接口类进行时间的监听(代码已详细说明,比较好).

最后就是弹窗的调用了:

 private void showDialog() {
        MyDialog myDialog = new MyDialog(this, R.style.dialog);
        myDialog.setCancelable(false);//返回键不可以关闭弹窗
        myDialog.setCanceledOnTouchOutside(false);//点击弹窗之外不能关闭弹窗
        myDialog.setTitle("温馨提示")
                .setMessage("确定要删除这个文件吗?")
                .setClickListener(new MyDialog.DialogClickListener() {
                    @Override
                    public void onYes() {
                        Log.e("Dialog", "点击确定要做的事情在这里写");
                    }

                    @Override
                    public void onNO() {
                        Log.e("Dialog", "点击取消要做的事情在这里写");
                    }
                }).show();
    }

这是效果图)

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999306.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号