属于自己的Android对话框(Dialog)自定义集合

针对“属于自己的Android对话框(Dialog)自定义集合”的完整攻略,下面将进行详细讲解。

1.前言

Dialog是Android开发中常用的一个组件,一般情况下系统已经提供了许多定制化的Dialog,但这些Dialog并不能直接满足我们的业务需求,因此需要自定义Dialog,本攻略将用实例来展示如何编写属于自己的Dialog组件。

2.思路分析

自定义Dialog的基本思路是创建一个继承自Dialog类的自定义类,在该类中编写自定义的样式和行为,最终将该类实例化并显示出来。

具体步骤如下:

  1. 创建一个类继承自Dialog;

  2. 在该类中编写自己的样式和行为,比如:添加控件和设置布局等;

  3. 在Activity中实例化自定义类,然后调用show()方法呈现出来。

3.示例解析

下面以“自定义登录对话框”和“自定义日期选择对话框”两个实例来分别展示自定义Dialog的详细步骤。

3.1 自定义登录对话框

3.1.1 创建布局文件

首先需要创建一个布局文件dialog_login.xml,用于设置对话框的布局样式。该文件代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#ffd700"
        android:gravity="center_horizontal|center_vertical"
        android:text="登录"
        android:textSize="20dp" />

    <EditText
        android:id="@+id/username"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="请输入用户名"
        android:paddingLeft="10dp" />

   <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="请输入密码"
        android:paddingLeft="10dp" />

   <Button
       android:id="@+id/btn_confirm"
       android:layout_width="match_parent"
       android:layout_height="50dp"
       android:text="登录"
       android:background="#ffd700" />

</LinearLayout>

该布局文件采用了线性布局的形式,包含了一个TextView和两个EditText控件以及一个Button控件。

3.1.2 创建自定义类

接着需要创建一个自定义类LoginDialog,继承自Dialog类,用于实现自定义的登录对话框,代码如下:

public class LoginDialog extends Dialog {

    public EditText username, password;
    public Button btnConfirm;

    public LoginDialog(Context context) {
        super(context);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.dialog_login);
        setCanceledOnTouchOutside(false);
        initView();
    }

    private void initView() {
        username = findViewById(R.id.username);
        password = findViewById(R.id.password);
        btnConfirm = findViewById(R.id.btn_confirm);
    }

    public void setPositiveListener(View.OnClickListener listener) {
        btnConfirm.setOnClickListener(listener);
    }
}

该自定义类LoginDialog继承自Dialog类,构造函数中使用requestWindowFeature方法请求不显示标题,然后设置布局文件为dialog_login.xml,并且设置对话框可点击外部取消。同时,该类中包含了三个公共属性:username、password和btnConfirm,分别对应了布局文件中的两个EditText控件和一个Button控件。除此之外,还提供了一个公共方法setPositiveListener,用于设置确认登录按钮的点击事件监听器。

3.1.3 在Activity中使用

最后在Activity中实例化自定义类LoginDialog,并设置确认登录按钮的点击事件监听器,代码如下:

public class MainActivity extends AppCompatActivity {

    private Button mBtnLogin;

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

        initView();
        initListener();
    }

    private void initView() {
        mBtnLogin = findViewById(R.id.btn_login);
    }

    private void initListener() {
        mBtnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LoginDialog dialog = new LoginDialog(MainActivity.this);
                dialog.setPositiveListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String username = dialog.username.getText().toString();
                        String password = dialog.password.getText().toString();
                        Toast.makeText(MainActivity.this, "用户名:" + username + " ,密码:" + password, Toast.LENGTH_SHORT).show();
                        dialog.dismiss();
                    }
                });
                dialog.show();
            }
        });
    }
}

在Activity的onCreate()方法中,首先找到登录按钮控件mBtnLogin,然后为该控件设置点击事件监听器。监听器中,实例化LoginDialog类并为其设置确认登录按钮的点击事件监听器,并在该监听器中获取输入的用户名和密码,并显示一个Toast提示信息,最后调用dismiss方法关闭对话框。

一旦点击了登录按钮,就会显示一个自定义的登录对话框,用户可以在该对话框中输入用户名和密码,然后点击确认按钮,即可触发保存操作和关闭对话框。

3.2 自定义日期选择对话框

3.2.1 创建布局文件

同样需要先创建一个布局文件dialog_date_picker.xml,该文件用于设置对话框的布局样式。该文件代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <DatePicker
        android:id="@+id/date_picker"
        android:layout_width="match_parent"
        android:layout_height="240dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="10dp"
        android:gravity="right">

        <Button
            android:id="@+id/btn_confirm"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:background="#ffd700"
            android:text="确认" />

        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:background="#ffd700"
            android:text="取消" />
    </LinearLayout>
</LinearLayout>

该布局文件采用了线性布局的形式,包含了一个DatePicker控件以及两个Button控件。

3.2.2 创建自定义类

接着需要创建一个自定义类DatePickerDialog,继承自Dialog类,用于实现自定义的日期选择对话框,代码如下:

public class DatePickerDialog extends Dialog {

    private DatePicker datePicker;
    private Button btnCancel;
    private Button btnConfirm;

    public DatePickerDialog(Context context, int themeResId) {
        super(context, themeResId);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.dialog_date_picker);
        datePicker = findViewById(R.id.date_picker);
        btnCancel = findViewById(R.id.btn_cancel);
        btnConfirm = findViewById(R.id.btn_confirm);

        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
    }

    public void setDate(int year, int month, int day) {
        datePicker.updateDate(year, month, day);
    }

    public void setPositiveButton(View.OnClickListener listener) {
        btnConfirm.setOnClickListener(listener);
    }
}

该自定义类DatePickerDialog继承自Dialog类,构造函数中同样使用requestWindowFeature方法请求不显示标题,然后设置布局文件为dialog_date_picker.xml。此外,在该类中还提供了两个自定义方法:setDate和setPositiveButton。setDate方法用于设置DatePicker控件的初始日期,setPositiveButton方法用于设置确认日期选择按钮的点击事件监听器。

3.2.3 在Activity中使用

最后在Activity中实例化自定义类DatePickerDialog,并将其显示出来,代码如下:

public class MainActivity extends AppCompatActivity {

    private Button mBtnDatePicker;

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

        initView();
        initListener();
    }

    private void initView() {
        mBtnDatePicker = findViewById(R.id.btn_date_picker);
    }

    private void initListener() {
        mBtnDatePicker.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DatePickerDialog dialog = new DatePickerDialog(MainActivity.this, R.style.dialog);
                dialog.setDate(2021, 2, 6);
                dialog.setPositiveButton(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        int year = dialog.datePicker.getYear();
                        int month = dialog.datePicker.getMonth();
                        int day = dialog.datePicker.getDayOfMonth();
                        Toast.makeText(MainActivity.this, year + "-" + (month + 1) + "-" + day, Toast.LENGTH_SHORT).show();
                        dialog.dismiss();
                    }
                });
                dialog.show();
            }
        });
    }
}

在Activity中,首先找到日期选择按钮控件mBtnDatePicker,然后为该控件设置点击事件监听器。监听器中,实例化DatePickerDialog类并为其设置日期和确认日期选择按钮的点击事件监听器,并在该监听器中获取选择的日期,并显示一个Toast提示信息,最后调用dismiss方法关闭对话框。

一旦点击了日期选择按钮,就会显示一个自定义的日期选择对话框,用户可以在该对话框中选择日期,然后点击确认按钮,即可触发保存操作和关闭对话框。

4.总结

以上就是自定义Dialog完整攻略的详细步骤和示例展示,自定义Dialog可以满足不同业务场景的需要,也为用户提供更便捷的操作。在自定义Dialog时需要注意样式和行为的一致性,并尽可能保持统一的风格和交互方式,以便于用户使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:属于自己的Android对话框(Dialog)自定义集合 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • MySQL 字符类型大小写敏感

    MySQL 字符类型大小写敏感攻略 MySQL 是一个常用的关系型数据库管理系统,它提供了多种字符类型用于存储和处理数据。其中一个重要的特性是字符类型的大小写敏感性。在本攻略中,我们将详细讲解 MySQL 字符类型大小写敏感的相关知识,并提供两个示例说明。 1. 字符类型大小写敏感性的概念 在 MySQL 中,字符类型的大小写敏感性指的是对于字符串比较操作是…

    other 2023年8月16日
    00
  • Windows Vista 简体中文32位正式版(MSDN)下载

    Windows Vista 简体中文32位正式版(MSDN)下载攻略 1. 确认系统要求 首先,确保你的计算机符合Windows Vista的最低系统要求。以下是Windows Vista的最低系统要求: 处理器:1 GHz 32位(x86)或64位(x64)处理器 内存:1 GB RAM(32位)或2 GB RAM(64位) 硬盘空间:16 GB可用空间(…

    other 2023年7月28日
    00
  • SQL提取数据库表名及字段名等信息代码示例

    SQL提取数据库表名及字段名等信息的代码示例主要分为以下几个步骤: 1. 获取数据库中所有表名的SQL语句 获取数据库中所有表名的SQL语句可以使用如下代码: SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=’数据库名’; 其中,将上述代码中的“数据库名”替换成具体的数据…

    other 2023年6月25日
    00
  • vue实现骨架屏的示例

    Vue实现骨架屏的示例攻略 1. 什么是骨架屏? 骨架屏是一种用于优化用户体验的页面加载效果。它会先展示一个简单的页面结构,给用户一种页面正在加载的感觉,同时也提供了一种参照,让用户知道具体内容将要填充到哪个位置上。 2. 实现步骤 2.1 创建Vue项目 首先,我们需要创建一个Vue项目。可以使用Vue CLI来快速搭建项目结构。在命令行中执行以下命令: …

    other 2023年6月28日
    00
  • React Hook用法示例详解(6个常见hook)

    首先需要明确的是React Hook是React16.8中加入的新特性,它可以让我们在不编写类的情况下使用state和其他React特性。 下面分别介绍React Hook中的6个常见hook及其用法示例: 1.useState import React, { useState } from ‘react’; function Example() { con…

    other 2023年6月27日
    00
  • MySQL如何修改字段的默认值和空值

    若想更新 MySQL 表中的默认值或允许空值,可以通过修改表结构的方式实现。下面是修改 MySQL 表的默认值和空值的完整攻略: 查看表结构 在进行修改之前,我们首先需要查看该表的结构、字段和属性信息。可以使用以下命令查看表结构: DESC `table_name`; 需要替换 table_name 为你需要查看表结构的表名。 修改字段默认值 如果需要修改表…

    other 2023年6月26日
    00
  • win7 32位旗舰版下载安装版图文教程

    Win7 32位旗舰版下载安装版图文教程 本教程将详细介绍如何下载和安装Win7 32位旗舰版操作系统。请按照以下步骤进行操作: 步骤一:下载Win7 32位旗舰版 打开浏览器,访问微软官方下载中心。 在页面上找到并点击“下载工具”按钮,下载并安装“Windows 7 USB/DVD Download Tool”。 安装完成后,打开该工具。 步骤二:准备安装…

    other 2023年7月28日
    00
  • 流放之路3.2野蛮人酋长超载火旋风BD介绍 开荒后期BD攻略

    流放之路3.2野蛮人酋长超载火旋风BD介绍 简介 在流放之路3.2版本中,野蛮人酋长超载火旋风(Barbarian Chieftain Cyclone with Berserk)是一种强大的建议角色扮演(ARPG)构建。该构建利用野蛮人的强大生存能力和高爆发伤害,以火旋风技能为主要输出手段。本攻略将详细介绍该构建的技能配置、装备选择和技能使用策略。 技能配置…

    other 2023年8月5日
    00
合作推广
合作推广
分享本页
返回顶部