Android AlertDialog

时间:2020-02-23 14:28:45  来源:igfitidea点击:

如果我们要求用户从屏幕上显示的提示中选择一个选项,则可以使用Android AlertDialog。
在本教程中,我们将讨论如何使用一个按钮(确定按钮),两个按钮(是和否)和三个按钮(是,否和取消)创建不同的警报对话框。

Android AlertDialog

以下是我们将在本教程中创建的最终android警报对话框应用程序。

Android AlertDialog是Android应用程序中最重要和最基本的组件之一。
警报对话框用于向用户显示警报,并获得用户的确认。
为了创建一个警报对话框,我们需要创建一个对象" AlertDialogBuilder",该对象是" AlertDialog"的内部类。
其语法如下。

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

Android AlertDialog组件

  • 标题:请注意,标题是可选的

  • 内容:将消息显示给用户。
    它可以是字符串消息,列表或者自定义布局

  • 动作按钮:这些按钮有三种类型。
    它们是正,负和中性操作按钮。
    一个警报对话框最多可以包含三个操作按钮。
    通常,以下是按钮的约定:如果希望用户接受操作,请使用"正向操作"按钮。
    通常显示为OK/YES。

  • 如果用户想要取消操作,则可以使用"否定操作"按钮(NO)。

  • 如果用户要推迟决策,请使用"中立行动"按钮(稍后)。

现在我们需要使用ʻAlertDialogBuilder`类设置这些按钮的方法。
语法如下。

alertDialogBuilder.setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener);
alertDialogBuilder.setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener);
alertDialogBuilder.setNeutralButton(CharSequence text, DialogInterface.OnClickListener listener);

第一个参数是要显示的文本。
第二个参数是按下肯定按钮时要调用的侦听器。

AlertDialog函数

除此之外,还有一些功能可用于自定义警报对话框,如下所示。

  • setIcon(Drawable icon):此方法设置警报对话框的图标
  • setCancelable(boolean cancelable):此方法设置对话框是否可以取消的属性
  • setMessage(CharSequence message):此方法设置要在警报对话框中显示的消息
  • setMultiChoiceItems(CharSequence [] items,boolean [] checkedItems,DialogInterface.OnMultiChoiceClickListener侦听器):此方法将要在对话框中显示的项目列表设置为内容。
    所选选项将由侦听器通知
  • setOnCancelListener(DialogInterface.OnCancelListener onCancelListener):此方法设置在取消对话框时将调用的回调
  • setTitle(CharSequence title):此方法设置标题显示在对话框中
  • getListView():此函数用于获取对话框中使用的列表视图

创建并设置对话框构建器之后,我们需要通过调用构建器类的create()方法来创建警报对话框。
其语法如下所示。

AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();

Android AlertDialog示例项目结构

此应用程序由三个按钮组成,这些按钮可打开包含相应按钮数量的警报对话框。

Android警报对话框项目代码

该应用程序包含一个活动。
活动的布局具有三个按钮,如下面的xml文件所示。

activity_alert.xml

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
  xmlns:tools="https://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".AlertActivity" >

  <Button
      android:id="@+id/one_button_alert"
      android:layout_width="200dip"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:layout_marginTop="25dip"
      android:layout_marginLeft="20dip"
      android:text="Single Button Alert" 
  <Button
      android:id="@+id/two_button_alert"
      android:layout_width="200dip"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:layout_below="@id/one_button_alert"
      android:layout_marginLeft="20dip"
      android:text="Two Buttons Alert" 
  <Button
      android:id="@+id/three_button_alert"
      android:layout_width="200dip"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:layout_below="@id/two_button_alert"
      android:layout_marginLeft="20dip"
      android:text="Three Buttons Alert" 
</RelativeLayout>

下面给出了ʻAlertActivity.java`。
每次单击按钮都会调用带有不同操作按钮集的警报对话框。
单击动作按钮时,将显示与该动作按钮相对应的Toast。

package com.theitroad.alertdialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class AlertActivity extends Activity {
  private Button button1;
  private Button button2;
  private Button button3;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_alert);
      button1 = (Button) findViewById(R.id.one_button_alert);
      button2 = (Button) findViewById(R.id.two_button_alert);
      button3 = (Button) findViewById(R.id.three_button_alert);

      button1.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              AlertDialog.Builder builder = new AlertDialog.Builder(
                      AlertActivity.this);
              builder.setTitle("Sample Alert");
              builder.setMessage("One Action Button Alert");
              builder.setPositiveButton("OK",
                      new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog,
                                              int which) {
                              Toast.makeText(getApplicationContext(),"Yes is clicked",Toast.LENGTH_LONG).show();
                          }
                      });
              builder.show();
          }
      });
      button2.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              AlertDialog.Builder builder = new AlertDialog.Builder(
                      AlertActivity.this);
              builder.setTitle("Sample Alert");
              builder.setMessage("Two Action Buttons Alert Dialog");
              builder.setNegativeButton("NO",
                      new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog,
                                              int which) {
                              Toast.makeText(getApplicationContext(),"No is clicked",Toast.LENGTH_LONG).show();
                          }
                      });
              builder.setPositiveButton("YES",
                      new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog,
                                              int which) {
                              Toast.makeText(getApplicationContext(),"Yes is clicked",Toast.LENGTH_LONG).show();
                          }
                      });
              builder.show();
          }
      });
      button3.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              AlertDialog.Builder builder = new AlertDialog.Builder(
                      AlertActivity.this);
              builder.setTitle("Sample Alert");
              builder.setMessage("Three Action Buttons Alert Dialog");
              builder.setNegativeButton("NO",
                      new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog,
                                              int which) {
                              Toast.makeText(getApplicationContext(),"No is clicked",Toast.LENGTH_LONG).show();
                          }
                      });
              builder.setPositiveButton("YES",
                      new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog,
                                              int which) {
                              Toast.makeText(getApplicationContext(),"Yes is clicked",Toast.LENGTH_LONG).show();
                          }
                      });
              builder.setNeutralButton("CANCEL",
                      new DialogInterface.OnClickListener() {
                          public void onClick(DialogInterface dialog,
                                              int which) {
                              Toast.makeText(getApplicationContext(),"Cancel is clicked",Toast.LENGTH_LONG).show();
                          }
                      });

              builder.show();
          }
      });
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      //Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
  }

}