AlertDialog对话框

简介

        AlertDialog是一个常用的组件,用于展示一个漂浮在当前界面之上的对话框,常用来显示警告、确认信息或简单的用户输入。通常,我们不是直接实例化AlertDialog对象,而是通过其内部类AlertDialog.Builder来构建。AlertDialog 不同于前面已经学习过的 UI 控件,它不能用 new 方法创造出来,也不能用 XML 创建,只能通过 AlertDialob 的内部类 Builder 来创建。

一、AlertDialog.Builder主要方法

        相应方法简单解释:

                Item项设置及监听,MultiChoiceItems多选,SingleChoiceItems单选,Title标题,Message对话框的内容,setView加载自定义布局。

Neutral中立按钮,Posi确定按钮,Nega取消按钮

二、三大按钮

        确定按钮setPositivebuttom("确定",null),setNegativebutton("取消",null),setNatralbuttom("中立",null)均可以设置对应的监听。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder= new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("中心技术")
                        .setIcon(R.mipmap.ic_launcher)
                                .setView(R.layout.item_fruit);
                builder.setPositiveButton("确定",null);
                builder.setNegativeButton("取消",null);
                builder.setNeutralButton("中立",null);
                builder.create().show();
            }
        });
    }
}

效果:

三、setView自定义模板加载

          创建Layout布局,通过setView加载布局:

        可以在Layout的xml布局中自定义对话框的各种样式。

        此例中的xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="132dp"
        android:layout_marginTop="32dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:src="@drawable/ic_launcher_background" />
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="对话框"
        app:layout_constraintEnd_toEndOf="@+id/imageView"
        app:layout_constraintHorizontal_bias="0.54"
        app:layout_constraintStart_toStartOf="@+id/imageView"
        app:layout_constraintTop_toBottomOf="@+id/imageView" />
</androidx.constraintlayout.widget.ConstraintLayout>
                代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder= new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("中心技术")
                        .setIcon(R.mipmap.ic_launcher)
                                .setView(R.layout.item_fruit);
                builder.create().show();
            }
        });
    }
}

四、setItems列表项对话框

        .setItems() 方法参数解释:

.setItems() 方法是 AlertDialog.Builder 类中的一个方法,用于在对话框中展示一系列可点击的文本项。与 .setSingleChoiceItems().setMultiChoiceItems() 不同,.setItems() 不涉及复选或单选逻辑,每个选项点击后都会触发相同的监听器,通常用于提供一系列操作供用户选择。下面是这个方法的参数解释及使用示例:

  • Items: 这是一个字符序列数组(CharSequence[])或列表(List<CharSequence>),包含了要在对话框中显示的每个选项的文本。

  • new DialogInterface.OnClickListener(): 这是一个匿名内部类,用于监听每个选项的点击事件。当用户点击列表中的任意一项时,会触发 onClick 方法。它包含两个参数:

    • DialogInterface dialog: 触发点击事件的对话框实例。
    • int which: 用户点击的选项的索引,索引与Items数组中的位置相对应。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              AlertDialog.Builder builder= new AlertDialog.Builder(MainActivity.this);
                String[] Items = new String[]{"笑笑", "开心", "喜悦", "高兴", "欢喜"};
              builder.setTitle("中心技术")
                      .setIcon(R.mipmap.ic_launcher)
                      .setItems(Items, new DialogInterface.OnClickListener() {
                          @Override
                          public void onClick(DialogInterface dialog, int which) {
                              Toast.makeText(MainActivity.this, "选择"+Items[which], Toast.LENGTH_SHORT).show();
                          }
                      });

              builder.setPositiveButton("确认",null);
              builder.create().show();
            }
        });
    }
}

五、setSingleChoiceItems单选列表项的对话框

.setSingleChoiceItems()中参数解释:

  • Items: 这是一个字符数组(CharSequence[])或列表(List<CharSequence>),包含了要在对话框中显示为单选列表的每个项目的文本。每个项目将作为一个单独的可选项出现在列表中。

  • 9: 默认索引(默认选中)=这个参数表示默认选中的列表项的索引。在上述代码中,索引为9的项目会在对话框打开时被预选。索引是从0开始的,所以这里实际上是选择了第10个条目。确保提供的索引是有效的,即在Items的范围内,否则可能会引发异常。

  • new DialogInterface.OnClickListener(): 这是一个匿名内部类,用于监听列表项的选择事件。当用户从列表中选择一个项目时,onClick 方法会被调用。你需要在这个监听器里定义用户选择某项之后的处理逻辑。它的参数包括:

    • DialogInterface dialog: 触发点击事件的对话框实例。
    • int which: 所选标号=用户所选项目的索引。这个索引与你在Items中定义的项目一一对应,可以用来识别用户选择了哪一个选项。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              AlertDialog.Builder builder= new AlertDialog.Builder(MainActivity.this);
                String[] Items = new String[]{"笑笑", "开心", "喜悦", "高兴", "欢喜"};
              builder.setTitle("中心技术")
                      .setIcon(R.mipmap.ic_launcher)
                      .setSingleChoiceItems(Items, 9, new DialogInterface.OnClickListener() {
                          @Override
                          public void onClick(DialogInterface dialog, int which) {
                              Toast.makeText(MainActivity.this, "选择"+Items[which], Toast.LENGTH_SHORT).show();
                          }
                      });
              builder.setPositiveButton("确认",null);
              builder.create().show();
            }
        });
    }
}

效果:

setSingleChoiceItems单选

六、setMultiChoiceItems多选列表项的对话框

.setMultiChoiceItems() 方法参数解释:

.setMultiChoiceItems() 方法用于在 AlertDialog 中创建一个多选列表。与 .setSingleChoiceItems() 不同,它允许用户选择列表中的多个项目。以下是该方法的参数解析和使用示例:

  • items: 数据 = 这是一个字符序列数组(CharSequence[])或列表(List<CharSequence>),包含要显示在多选列表中的各个项目文本。

  • checkedItem: 选值 = 这是一个布尔型数组(boolean[]),用于指定列表中哪些项目在对话框打开时默认被选中。数组的索引需与items中元素的索引相对应,true 表示对应的项目被选中,false 表示未被选中。

  • new DialogInterface.OnMultiChoiceClickListener(): 监听 = 这是一个匿名内部类,用于监听多选列表项的选择状态变化。当用户更改列表中项目的选中状态时,会触发 onClick 方法。它有两个参数:

    • DialogInterface dialog: 触发事件的对话框实例。
    • int which: 被用户改变选中状态的项目的索引。
    • boolean isChecked: 表示该项目当前是否被选中。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                String[] items = new String[]{"笑笑", "开心", "喜悦", "高兴", "欢喜"};
                 boolean[] checkedItem = new boolean[]{false, false, false, false,false};
                builder.setTitle("中心技术")
                        .setIcon(R.mipmap.ic_launcher)
                        .setMultiChoiceItems(items, checkedItem, new DialogInterface.OnMultiChoiceClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                                checkedItem[which] = isChecked;
                            }
                        });
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String result = "";
                        for (int i = 0; i < checkedItem.length; i++) {
                            if (checkedItem[i]) {
                                result += items[i] + ",";
                            }
                        }
                        Toast.makeText(MainActivity.this, "结果["+result+"]", Toast.LENGTH_SHORT).show();
                    }
                });
                builder.create().show();
            }
        });
    }

效果:

setMultChioceItems效果

  • 47
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值