Andriod studio学习 之 对话框

本文深入探讨了Android中Dialog组件的多种应用方式,包括普通对话框、单选对话框、多选对话框等常见类型,以及自定义对话框的实现方法。通过代码示例,详细讲解了如何设置对话框的属性、添加按钮及监听器,展示了水平进度对话框、圆形进度条对话框、日期和时间选择对话框的使用场景。

Dialog对话框

一 常用的对话框

1.普通对话框

//普通对话框
        public void  normal_dialog(){
            WindowManager.LayoutParams lp = getWindow().getAttributes();
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            //设置属性
            builder.setIcon(R.drawable.ic_launcher_background);//设置图标
            builder.setTitle("hello body");//设置标题
            builder.setMessage("这是内容");//设置内容
    
            //设置确定按钮
            builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this, "你点击了ok", Toast.LENGTH_SHORT).show();
                }
            });
            //设置取消按钮
            builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this, "你点击了cancle", Toast.LENGTH_SHORT).show();
                }
            });
            //使用建造者创建对话框
            AlertDialog dialog = builder.create();
            //显示
            dialog.show();

2.单选对话框

//单选对话框
    public void single_dialog(){
        //构建者
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //设置属性
        builder.setIcon(R.drawable.ic_launcher_background);//设置图标
        builder.setTitle("好好学习了吗?");//设置标题
        builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
            @Override
            public void onClick( DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this, "你点击了ok", Toast.LENGTH_SHORT).show();  
            }
        });
        builder.setNegativeButton("cancle", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this, "你点击了Cancle", Toast.LENGTH_SHORT).show();
            }
        });
        final String[] items={"是的","没有","还行"};
        //设置单选列表
        //参数一 列表 参数二 默认选中下表 参数三 事件监听
        builder.setSingleChoiceItems(items, 2, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this, "你选择"+items[which], Toast.LENGTH_SHORT).show();
            }
        });
        //使用建造者创建对话框
        AlertDialog dialog = builder.create();
        //显示
        dialog.show();

3.多选对话框

private void mulite_dialog(){
        final String[] items ={"凤姐","小赵","如花","翠花"};
        final boolean[] flags={true,true,true,false};
        //构建者
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //画图
        builder.setIcon(R.drawable.ic_launcher_background);
        builder.setTitle("小姐姐们");//设置标题
        builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                for (int i = 0; i < flags.length; i++) {
                    if (flags[i]){
                        Toast.makeText(MainActivity.this, "是", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
        builder.setNegativeButton("cancle", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this, "你点击了cancle", Toast.LENGTH_SHORT).show();
            }
        });
        //设置多选列表
        //参数一 列表 参数二 默认选中下表 参数三 事件监听
        builder.setMultiChoiceItems(items, flags, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                flags[which]=isChecked;
            }
        });
        //使用建造者创建对话框
        AlertDialog dialog = builder.create();
        //显示
        dialog.show();
    }

4.自定义对话框

private void Mydialog(){
        View view = LayoutInflater.from(MainActivity.this).inflate(R.layo
<think>我们正在讨论Android Studio中自定义输入对话框的实现方法。根据提供的引用内容,虽然它们提到了自定义对话框,但并没有直接展示如何创建一个带有输入框的自定义对话框。不过,我们可以基于自定义对话框的一般方法,结合输入框的需求来构建。 自定义对话框通常包括以下步骤: 1. 创建自定义布局文件(XML),定义对话框的界面,包括输入框等控件。 2. 创建自定义对话框类(可选),或者直接使用AlertDialog.Builder并设置自定义视图。 3. 在Activity中实例化对话框,设置按钮事件等。 用户需要的是带有输入框的自定义对话框,因此我们可以在自定义布局中加入EditText控件。 具体步骤如下: 步骤1:创建自定义布局文件(例如dialog_input.xml) 在res/layout目录下创建dialog_input.xml,内容如下(示例): ```xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="请输入" android:textSize="18sp" /> <EditText android:id="@+id/et_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:hint="输入内容" /> </LinearLayout> ``` 步骤2:在代码中构建对话框 在Activity中,我们可以使用AlertDialog.Builder,并设置自定义视图。 注意:为了获取输入框中的内容,我们需要通过自定义视图找到EditText控件。 示例代码: ```java // 在Activity的某个方法中,比如按钮点击事件 Button btnShowDialog = findViewById(R.id.btn_show_dialog); // 假设布局中有一个按钮 btnShowDialog.setOnClickListener(v -> { // 创建自定义视图 View dialogView = LayoutInflater.from(this).inflate(R.layout.dialog_input, null); EditText etInput = dialogView.findViewById(R.id.et_input); AlertDialog dialog = new AlertDialog.Builder(this) .setTitle("输入对话框") // 也可以不在XML中设置标题,而用这里的setTitle .setView(dialogView) // 设置自定义视图 .setPositiveButton("确定", (dialogInterface, which) -> { // 当点击确定按钮时,获取输入内容 String inputText = etInput.getText().toString(); // 处理输入内容,例如显示Toast Toast.makeText(this, "输入内容:" + inputText, Toast.LENGTH_SHORT).show(); }) .setNegativeButton("取消", null) // 取消按钮 .create(); dialog.show(); }); ``` 说明: 1. 我们通过LayoutInflater加载了自定义布局,并将其设置到AlertDialog.Builder中。 2. 通过自定义视图,我们可以获取其中的EditText控件,然后在确定按钮的点击事件中获取用户输入。 3. 注意:在对话框显示后,EditText会自动获得焦点并弹出软键盘,这是正常现象。 另外,也可以选择继承Dialog类来创建完全自定义的对话框类,但使用AlertDialog.Builder更为简洁。 根据引用[1]中的示例,他们使用了自定义的CustomDialogBuilder,但原理类似,都是设置自定义视图。 因此,实现自定义输入对话框的关键在于自定义布局中包含输入框,并在对话框按钮事件中处理输入内容。 注意:在引用[1]的代码中有一个拼写错误(shoeToast应为showToast),我们在实际代码中应避免。 相关问题: 1. 如何限制输入对话框中的输入类型(例如只允许数字)? 2. 如何实现自定义对话框的样式(如圆角、背景等)? 3. 如何在自定义对话框中添加多个输入框? </think>### Android Studio中自定义输入对话框的实现方法 在Android Studio中创建自定义输入对话框需要结合自定义布局和对话框构建器。以下是详细步骤: #### 1. **创建自定义布局文件**(XML) 在`res/layout`目录下新建`dialog_input.xml`,添加输入控件: ```xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:id="@+id/tvTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="用户登录" android:textSize="18sp"/> <EditText android:id="@+id/etUsername" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:hint="请输入用户名"/> <EditText android:id="@+id/etPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:inputType="textPassword" android:hint="请输入密码"/> </LinearLayout> ``` #### 2. **在Activity中构建对话框** ```java // 触发对话框的按钮 Button btnShowDialog = findViewById(R.id.btn_show_dialog); btnShowDialog.setOnClickListener(v -> showInputDialog()); ``` ```java private void showInputDialog() { // 1. 加载自定义布局 View dialogView = LayoutInflater.from(this).inflate(R.layout.dialog_input, null); // 2. 获取输入控件 EditText etUsername = dialogView.findViewById(R.id.etUsername); EditText etPassword = dialogView.findViewById(R.id.etPassword); // 3. 构建对话框 AlertDialog dialog = new AlertDialog.Builder(this) .setView(dialogView) // 设置自定义视图 .setTitle("登录验证") .setPositiveButton("确认", (d, which) -> { // 获取输入内容 String username = etUsername.getText().toString(); String password = etPassword.getText().toString(); Toast.makeText(this, "用户名: " + username, Toast.LENGTH_SHORT).show(); }) .setNegativeButton("取消", (d, which) -> d.dismiss()) .create(); // 4. 显示对话框 dialog.show(); } ``` #### 关键点说明: 1. **自定义布局**:通过XML定义包含`EditText`的对话框界面 2. **视图注入**:使用`LayoutInflater.inflate()`加载布局 3. **事件处理**: - 确认按钮:通过`setPositiveButton()`获取输入内容 - 取消按钮:`setNegativeButton()`自动关闭对话框 4. **输入类型**:可通过`android:inputType`控制输入格式(如密码框) #### 效果优化建议: 1. **自动弹出键盘**: ```java dialog.setOnShowListener(dialogInterface -> { etUsername.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(etUsername, InputMethodManager.SHOW_IMPLICIT); }); ``` 2. **输入验证**:在点击确认时检查输入是否为空 3. **自定义样式**:在`styles.xml`中定义`<style name="CustomDialog">`修改背景/圆角等 > 该方法遵循Material Design规范,兼容Android 4.1+系统[^1][^3]。实际开发中建议将对话框逻辑封装到单独类中提高复用性[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值