Android中制作自定义dialog对话框的实例分享

yizhihongxing

Android中制作自定义dialog对话框的实例分享,具体步骤如下:

一、创建新的xml布局文件

首先,在res文件夹下创建一个名为dialog_custom.xml的新的xml布局文件。接着在xml文件中添加需要展示的view,可以自由设计布局样式、添加TextView、EditText、Button等控件,并设置好控件的ID和属性。

例如,下面的代码实现了一个带有标题和两个按钮的对话框:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="20dp">

    <TextView
        android:id="@+id/dialog_title"
        android:text="标题"
        android:textSize="20dp"
        android:textColor="@android:color/holo_blue_dark"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"/>

    <EditText
        android:id="@+id/dialog_edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入内容"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:gravity="right">

        <Button
            android:id="@+id/dialog_cancel_btn"
            android:text="取消"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />

        <Button
            android:id="@+id/dialog_confirm_btn"
            android:text="确定"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"/>

    </LinearLayout>

</LinearLayout>

二、创建自定义Dialog

接下来,在Activity中创建自定义Dialog类,并在其中绑定XML布局文件中定义的控件,实现对话框的功能逻辑。

例如,下面的代码实现了一个自定义对话框类CustomDialog,在其中绑定了XML布局中的控件,当用户点击确定按钮时弹出Toast显示用户输入的内容:

public class CustomDialog extends Dialog {

    private String title;
    private EditText editText;
    private Button confirmButton;

    public CustomDialog(Context context, String title) {
        super(context);
        this.title = title;
        init();
    }

    private void init() {
        setContentView(R.layout.dialog_custom);
        setTitle(title);

        editText = findViewById(R.id.dialog_edit_text);
        confirmButton = findViewById(R.id.dialog_confirm_btn);

        confirmButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String content = editText.getText().toString();
                Toast.makeText(getContext(), content, Toast.LENGTH_SHORT).show();
                dismiss();
            }
        });
    }

}

三、在Activity中调用自定义Dialog

最后,在Activity中调用自定义Dialog,并设置好dialog的相关属性和逻辑。例如,可以在按钮点击事件中调用自定义Dialog:

public class MainActivity extends AppCompatActivity {

    private Button showDialogButton;

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

        showDialogButton = findViewById(R.id.show_dialog_button);
        showDialogButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CustomDialog dialog = new CustomDialog(MainActivity.this, "自定义对话框");
                dialog.setCancelable(true);
                dialog.show();
            }
        });
    }
}

上面的代码中,首先通过findViewById获取到了按钮对象showDialogButton,并给按钮设置了一个点击事件监听器。当用户点击按钮时,会创建一个CustomDialog对象,并调用dialog.show()方法展示对话框。

示例1:根据用户输入动态更改布局

下面是一个示例,让用户输入一个数字,然后根据数字动态添加EditText控件:

public class CustomDialog extends Dialog {

    // ...

    public CustomDialog(Context context, String title) {
        // ...
    }

    private void init() {
        setContentView(R.layout.dialog_custom);
        setTitle(title);

        editText = findViewById(R.id.dialog_edit_text);
        confirmButton = findViewById(R.id.dialog_confirm_btn);

        confirmButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num = Integer.parseInt(editText.getText().toString());
                addEditTexts(num);
                dismiss();
            }
        });
    }

    private void addEditTexts(int num) {
        LinearLayout layout = findViewById(R.id.dialog_edit_text_layout);
        layout.removeAllViews();

        for (int i = 0; i < num; i++) {
            EditText editText = new EditText(getContext());
            editText.setInputType(InputType.TYPE_CLASS_NUMBER);
            editText.setHint("EditText " + (i + 1));
            layout.addView(editText);
        }
    }
}

上面的代码中,我们新增了一个方法addEditTexts,用于动态添加EditText控件。当用户点击确定按钮时,会根据用户输入的数字创建相应数量的EditText控件,并添加到XML布局文件中的LinearLayout中。

同时,需要在XML布局文件中添加一个id为dialog_edit_text_layout的LinearLayout控件,用于动态添加EditText控件。

<LinearLayout
    android:id="@+id/dialog_edit_text_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"/>

示例2:自定义带有图片的对话框

下面是一个示例,创建一个自定义的带有图片和两个按钮的对话框:

public class CustomDialog extends Dialog {

    // ...

    public CustomDialog(Context context, String title, int imageResId) {
        super(context, R.style.CustomDialogTheme);
        this.title = title;
        this.imageResId = imageResId;
        init();
    }

    private void init() {
        setContentView(R.layout.dialog_custom2);
        setCancelable(true);
        getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        TextView titleTextView = findViewById(R.id.dialog_title);
        ImageView imageView = findViewById(R.id.dialog_image);
        Button cancelButton = findViewById(R.id.dialog_cancel_btn);
        Button confirmButton = findViewById(R.id.dialog_confirm_btn);

        titleTextView.setText(title);
        imageView.setImageResource(imageResId);

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

        confirmButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(), "确认", Toast.LENGTH_SHORT).show();
                dismiss();
            }
        });
    }
}

上面的代码中,我们创建了一个新的style,用于设置对话框的背景和圆角。同时,在CustomDialog中的构造函数中,还新增了一个参数imageResId,用于指定对话框中显示的图片资源。

<style name="CustomDialogTheme" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@drawable/ic_dialog_bg</item>
    <item name="android:background">@drawable/dialog_bg_shape</item>
    <item name="android:windowMinWidthMajor">90%</item>
    <item name="android:windowMinWidthMinor">90%</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowAnimationStyle">@style/DialogAnimation</item>
</style>

此外,我们在XML布局文件中引入了一个ImageView控件,用于展示图片。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="20dp">

    <TextView
        android:id="@+id/dialog_title"
        android:text="自定义对话框"
        android:textSize="20dp"
        android:textColor="@android:color/black"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"/>

    <ImageView
        android:id="@+id/dialog_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="20dp"
        android:src="@drawable/ic_dialog_image"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:gravity="right">

        <Button
            android:id="@+id/dialog_cancel_btn"
            android:text="取消"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />

        <Button
            android:id="@+id/dialog_confirm_btn"
            android:text="确认"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"/>

    </LinearLayout>

</LinearLayout>

上面的代码中,我们在LinearLayout中新增了一个ImageView控件,并将图片资源设置为ic_dialog_image,用于展示在对话框中的图片。

这样,我们就成功自定义了一个带有图片和两个按钮的对话框。在调用该对话框时,只需要传入对应的参数,即可相应地展示对应的图片和标题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android中制作自定义dialog对话框的实例分享 - Python技术站

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

相关文章

  • Win10怎么显示文件后缀名?Win10系统显示文件扩展名的方法

    在Win10系统中,显示文件后缀名可以通过以下步骤完成: 打开文件资源管理器:可以通过在任务栏上的搜索框中输入\”文件资源管理器\”来找到并打开它。 在文件资源管理器中,点击顶部菜单栏中的\”查看\”选项。 在\”查看\”选项卡中,找到\”文件名扩展名\”复选框,并确保其被选中。如果该复选框已经被选中,那么文件扩展名将会显示在文件名的末尾;如果未选中,文件扩…

    other 2023年8月5日
    00
  • 守望先锋自定义玩法快跑吧小姑娘怎么设置_快跑吧小姑娘玩法攻略

    守望先锋自定义玩法快跑吧小姑娘怎么设置 快跑吧小姑娘是守望先锋中一种自定义玩法,玩家可以通过自定义游戏来体验这种玩法。本文将详细介绍如何设置快跑吧小姑娘的规则和玩法。 快跑吧小姑娘玩法规则 快跑吧小姑娘玩法的规则是玩家需要在规定时间内通过各种障碍物,到达终点。如果在规定时间内没有到达终点,就算游戏失败。玩家可以设置多种障碍物和终点,来丰富玩法。 设置快跑吧小…

    other 2023年6月25日
    00
  • php从完整文件路径中分离文件目录和文件名的方法

    分离文件目录和文件名通常是在处理文件操作时经常会用到的操作。在PHP中,我们可以使用函数pathinfo()和dirname()来实现分离文件目录和文件名。下面是详细的攻略: 使用pathinfo() pathinfo() 函数返回文件路径的信息,包括文件目录、文件名、文件扩展名等信息。我们可以利用它来获取文件名称、文件目录和文件扩展名信息。 下面是一个示例…

    other 2023年6月26日
    00
  • flex布局右端对齐

    flex布局右端对齐 在页面布局中,经常需要将元素对齐到页面或者父元素的右端。在过去,一般通过float或者position: absolute的方式实现,但是这些方法有一些局限性。而CSS3中新增的flex布局在这方面做得非常好,可以轻松实现元素的右端对齐。 flex布局介绍 flex布局是CSS3中新增的一种布局方式,被称为弹性布局。它提供了一种更加灵活…

    其他 2023年3月28日
    00
  • android 自定义控件 自定义属性详细介绍

    下面我会为您详细讲解“Android自定义控件自定义属性详细介绍”的攻略。 什么是自定义属性 在Android中,控件相关的属性值都是可以在xml布局文件中进行设置的。除了Android系统提供的属性之外,我们也可以自己定义一些属性,来达到更好的效果和定制化的需求。 自定义属性的方法 我们可以通过在attrs.xml文件中定义属性,来实现自定义属性的效果。这…

    other 2023年6月25日
    00
  • 鼠标右键失灵怎么办?鼠标右键失灵原因分析及解决方法

    鼠标右键失灵怎么办?鼠标右键失灵原因分析及解决方法 原因分析 鼠标右键失灵可能是因为以下几个原因: 鼠标驱动问题:鼠标驱动程序出现错误,导致鼠标工作异常。 软件设置问题:某些软件设置鼠标右键点击无效或者拦截了鼠标右键的操作。 硬件问题:鼠标出现故障,右键点击功能出现异常。 解决方法 以下是几种解决方法: 方法一:重新安装鼠标驱动 1.在开始菜单中搜索设备管理…

    other 2023年6月27日
    00
  • osek网络管理入门

    以下是关于“OSEK网络管理入门”的完整攻略,包括OSEK网络管理的概述、使用方法以及两个示例说明。 OSEK网络管理概述 OSEK(Open Systems and the Embedded Kernel)是一个放的标准,用于嵌入式系统的开发。OSEK网络管理是OSEK标准中的一个组件,用于管理嵌入式系统中的网络通信。 OSEK网络管理提供了一组API,用…

    other 2023年5月7日
    00
  • Window7安装MariaDB数据库及系统初始化操作分析

    Window7安装MariaDB数据库及系统初始化操作分析 在Windows7操作系统上,安装MariaDB数据库并进行相关的系统初始化操作,主要可分为以下步骤: 步骤1:下载并安装MariaDB数据库 1.1 下载MariaDB数据库安装包 在MariaDB官网上下载MariaDB的Windows安装包,选择对应的版本、位数和版本号进行下载。 1.2 安装…

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