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

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日

相关文章

  • C语言实例梳理讲解常用关键字的用法

    C语言实例梳理讲解常用关键字的用法攻略 介绍 C语言作为计算机领域中最常见的编程语言之一,具有广泛的应用和应试范围。在学习C语言的过程中,了解语言中常用的关键字以及它们的使用方法是非常重要的。本攻略将通过实例讲解的方式,从常用关键字入手,帮助读者了解C语言的关键字及其使用方法。 常用关键字的讲解 if if 是一种条件语句,用于判断一个表达式的值是否为 tr…

    other 2023年6月27日
    00
  • Bootstrap入门书籍之(四)菜单、按钮及导航

    标题:Bootstrap入门书籍之(四)菜单、按钮及导航攻略 1. 菜单 在Bootstrap中,可以使用<ul>和<li>标签来创建导航菜单。以下是创建菜单的步骤: 在HTML文档中,创建一个<ul>元素,作为导航栏容器。 <ul class="nav"> <!– 菜单项 –&g…

    other 2023年6月28日
    00
  • 学习使用Bootstrap页面排版样式

    学习使用Bootstrap页面排版样式攻略 Bootstrap是一个流行的前端开发框架,它提供了一套强大的页面排版样式,可以帮助开发者快速构建美观且响应式的网页。下面是学习使用Bootstrap页面排版样式的完整攻略。 步骤一:引入Bootstrap 首先,你需要在你的HTML文件中引入Bootstrap。你可以通过以下方式引入: <!DOCTYPE …

    other 2023年8月18日
    00
  • 关于chrome 插件PageMonitor 安装及使用步骤

    关于Chrome插件PageMonitor的安装及使用步骤 一、插件概述 Chrome插件PageMonitor是一款非常实用的网页变化监测工具,用户可以通过该插件来实时检测指定网页的变化情况,且能够根据自身需求设定检测频率,监测变化范围等。 二、插件安装 打开Chrome浏览器,在地址栏中输入以下链接,进入PageMonitor插件的官方下载页面:http…

    其他 2023年3月28日
    00
  • 浅析Android Studio 3.0 升级各种坑(推荐)

    浅析Android Studio 3.0 升级各种坑(推荐) 为什么要升级Android Studio? 随着Android操作系统的不断升级和新功能的加入,开发者需要使用新的API才能保持应用程序的更新和市场竞争力。而新的API通常需要使用最新版本的Android Studio才能支持。此外,Android Studio 3.0带来了许多新的特性,如Kot…

    other 2023年6月26日
    00
  • 正则表达式截取字符串的方法技巧

    正则表达式是一种强大的字符串处理工具,可以用于匹配、搜索、替换等各种操作。它的语法通常比较复杂,但在掌握了一些基本技巧后,使用起来也会变得相对简单。 在截取字符串时,正则表达式可以用于匹配需要的字符,然后从中提取出想要的部分。下面就让我们来看看具体的方法和技巧。 一、基本语法 正则表达式的基本语法包含了一些元字符和特殊字符,比如 []、{}、()、*、+、?…

    other 2023年6月20日
    00
  • Java Swing组件下拉菜单控件JComboBox用法示例

    Java Swing组件下拉菜单控件JComboBox用法示例 JComboBox 用于创建下拉列表框,提供了在多个选项中选择一个选项的功能。使用 JComboBox,你可以轻松地构建用户界面,这些界面中包含可选的文本信息,如性别、年龄、城市等。 创建 JComboBox 要创建一个JComboBox,需要将对象的构造函数放入 JPanel 中: JPane…

    other 2023年6月27日
    00
  • R语言-解决处理矩阵遇到内存不足的问题

    R语言-解决处理矩阵遇到内存不足的问题攻略 在处理大型矩阵时,R语言可能会遇到内存不足的问题。这种情况下,我们可以采取一些策略来解决这个问题。下面是一个详细的攻略,包含了两个示例说明。 1. 优化内存使用 a. 使用稀疏矩阵 稀疏矩阵是一种特殊的矩阵,其中大部分元素为零。在R中,可以使用Matrix包来创建和操作稀疏矩阵。稀疏矩阵可以显著减少内存使用量,特别…

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