Android——自定义AlertDialog

本文介绍了如何在Android应用中创建并自定义AlertDialog,包括在布局文件中添加按钮,设置点击监听以弹出对话框。在实现过程中遇到EditText无法弹出输入法的问题,通过更改setContentView为setView来解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这篇文章首先介绍怎么在应用中弹出一个对话框AlertDialog以及相关的设置,然后在制定一个自定义的AlertDialog

AlertDialog的创建,在activity的布局文件中,加入一个按钮btn_click,并在活动代码里为其设置点击监听,在监听事件里弹出AlertDialog,下面是按钮的点击事件代码

 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("对话框标题")
                .setMessage("提示")
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //取消按钮点击事件
                        Toast.makeText(MainActivity.this, "你点击了取消", Toast.LENGTH_SHORT).show();
                    }
                })
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //确定按钮点击事件
                        Toast.makeText(MainActivity.this, "你点击了确定", Toast.LENGTH_SHORT).show();
                    }
                });
        AlertDialog dialog = builder.create();
        dialog.show();



**自定义AlertDialog**
先要新建一个布局文件custom_dialog_layout,里面放置按钮和文本

<?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="match_parent">


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="个人信息"
        android:gravity="center"
        android:id="@+id/textView"
        android:textStyle="bold"
        android:background="#888"/>
    <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:text="姓名:"
        android:textSize="24dp"
        />
    <EditText
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_weight="1"

        android:id="@+id/et_name"/>
</LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:text="电话:"
            android:textSize="24dp"
            />
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:id="@+id/et_tel"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <Button
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:text="提交"
            android:id="@+id/btn_submit"
            android:layout_height="fill_parent"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:text="取消"
            android:id="@+id/btn_cancel"
            android:layout_height="fill_parent"/>
    </LinearLayout>

</LinearLayout>

在activity.java中可以在点击事件里面这样写了
先通过Inflater.inflate()获得
View layout=getLayoutInflater.from(this).inflate(R.layout.custom_dialog_layout,null,false);

然后我们获得layout里面控件以及为按钮添加点击事件:

接下来为dialog 指定ContentView,整个点击事件代码

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        final AlertDialog dialog = builder.create();
       //获得view
        View layout = getLayoutInflater().from(this).inflate(R.layout.custom_dialog_layout, null, false);
        //获得view中的控件
        final EditText et_name = (EditText) layout.findViewById(R.id.et_name),
                et_tel = (EditText) layout.findViewById(R.id.et_tel);
        Button btn_submit = (Button) layout.findViewById(R.id.btn_submit),
                btn_cancel = (Button) layout.findViewById(R.id.btn_cancel);
        //为按钮添加事件监听
        btn_submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
                String str="name="+et_name.getText().toString()+",tel="+et_tel.getText().toString();
                Toast.makeText(MainActivity.this,str, Toast.LENGTH_SHORT).show();
            }
        });
        btn_cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });
        dialog.show();
        dialog.setContentView(layout);

运行结果如图。

这里写图片描述

问题出现了,输入文本框聚焦后并不弹出输入框。。。。

原因很。。。参考一下这篇博客 关于AlertDialog中EditText不能弹出输入法解决方法

只需要将setContentView (layout)改为setView(layout)

好了看看效果:
这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值