IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 自定义Dialog实现(二) -> 正文阅读

[移动开发]Android 自定义Dialog实现(二)

? ? ? ? 在之前的文章中介绍了自定Dialog的实现方法之一:https://blog.csdn.net/m0_57487205/article/details/124775019?spm=1001.2014.3001.5501icon-default.png?t=M5H6https://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:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="300dp"
        android:layout_height="200dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        android:background="@drawable/dialog_shape"
        app:layout_constraintTop_toTopOf="parent">

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:text="温馨提示"
            android:textColor="#8276F1"
            android:textSize="20sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:text="是否确定删除此文件?"
            android:textSize="15sp"
            android:textColor="#ff0000"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="@+id/textView" />

        <Button
            android:id="@+id/no"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginBottom="16dp"
            android:text="取消"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

        <Button
            android:id="@+id/yes"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="16dp"
            android:text="确定"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

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

/**
 * 自定义dialog
 */
public class MyDialog extends Dialog {
    private Button button_no;
    private Button button_yes;
    private String title = "title";
    private String message = "message";
    private DialogClickListener listener;

    /**
     * 构造器
     * @param context 上下文对象
     * @param themeResId 弹窗样式
     */
    public MyDialog(@NonNull Context context, int themeResId) {
        super(context, themeResId);
    }

    /**
     * 设置弹窗的标题
     * @param title 标题内容
     * @return 返回当前弹窗对象实现链式编程
     */
    public MyDialog setTitle(String title) {
        this.title = title;
        return this;
    }

    /**
     * 设置弹窗的提示内容
     * @param message 内容
     * @return **
     */
    public MyDialog setMessage(String message) {
        this.message = message;
        return this;
    }

    /**
     * 设置点击事件监听对象(传入调用者创建的监听对象)
     * @param listener 监听对象
     * @return **
     */
    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();
    }

这是效果图)

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 23:03:58  更:2022-07-04 23:06:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 2:33:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码