Android学习之AlertDialog

本文详细介绍了在Android应用中使用AlertDialog的8种常见方式,包括无按钮、带两个按钮、带三个按钮、带简单列表、带单选列表、带多选列表、带输入框和带自定义布局的对话框。每个示例都配有代码实现和截图展示,旨在帮助开发者快速掌握不同场景下的对话框应用。

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

为了创建AlertDialog,需要使用Builder类,创建AlertDialog.Builder类的对象实例,再通过show()方法显示对话框。

在编程的过程中发现SetMessage()方法和setSingleChoiceItems()等方法是互斥的,这个需要注意。

废话不多说,下面列出了8种AlertDialog对话框:

1 主界面布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <Button 
        android:id="@+id/btn_1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="不带按钮的Dialog"
        />
    
    <Button 
        android:id="@+id/btn_2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="带两个按钮的Dialog"
        />
    
    <Button 
        android:id="@+id/btn_3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="带三个按钮的Dialog"
        />
    
    <Button 
        android:id="@+id/btn_4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="带简单列表的Dialog"
        />
    
    <Button 
        android:id="@+id/btn_5"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="带单选列表的Dialog"
        />
    
    <Button 
        android:id="@+id/btn_6"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="带多选列表的Dialog"
        />
    
    <Button 
        android:id="@+id/btn_7"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="带输入框的Dialog"
        />
    
    <Button 
        android:id="@+id/btn_8"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="带自定义布局的Dialog"
        />
</LinearLayout>

手机截图如下:

2 主程序内容

package com.example.androiddialog;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements
		android.view.View.OnClickListener {
	private String[] team = { "一番队", "二番队", "三番队", "四番队", "五番队", "六番队", "七番队",
			"八番队", "九番队", "十番队" };
	private boolean[] choice = { true, false, true, false, false, false, true,
			false, false, false, };
	private Button btn_1, btn_2, btn_3, btn_4, btn_5, btn_6, btn_7, btn_8;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		initResource();
	}

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

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.btn_1:
			showDialog1();
			break;
		case R.id.btn_2:
			showDialog2();
			break;
		case R.id.btn_3:
			showDialog3();
			break;
		case R.id.btn_4:
			showDialog4();
			break;
		case R.id.btn_5:
			showDialog5();
			break;
		case R.id.btn_6:
			showDialog6();
			break;
		case R.id.btn_7:
			showDialog7();
			break;
		case R.id.btn_8:
			showDialog8();
			break;
		default:
			break;
		}
	}

	/**
	 * 初始化控件资源
	 */
	public void initResource() {
		btn_1 = (Button) findViewById(R.id.btn_1);
		btn_2 = (Button) findViewById(R.id.btn_2);
		btn_3 = (Button) findViewById(R.id.btn_3);
		btn_4 = (Button) findViewById(R.id.btn_4);
		btn_5 = (Button) findViewById(R.id.btn_5);
		btn_6 = (Button) findViewById(R.id.btn_6);
		btn_7 = (Button) findViewById(R.id.btn_7);
		btn_8 = (Button) findViewById(R.id.btn_8);
		btn_1.setOnClickListener(this);
		btn_2.setOnClickListener(this);
		btn_3.setOnClickListener(this);
		btn_4.setOnClickListener(this);
		btn_5.setOnClickListener(this);
		btn_6.setOnClickListener(this);
		btn_7.setOnClickListener(this);
		btn_8.setOnClickListener(this);
	}

	/**
	 * 什么都没有,只有一句文字的Dialog
	 */
	public void showDialog1() {
		new AlertDialog.Builder(this).setTitle("这是一个没有按钮的AlertDialog~")
				.create().show();
	}

	/**
	 * 带两个按钮的Dialog
	 */
	public void showDialog2() {
		new AlertDialog.Builder(this).setTitle("提示")
				.setIcon(R.drawable.ic_launcher).setMessage("带两个按钮的Dialog~")
				.setPositiveButton("确定", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub

					}
				}).setNegativeButton("取消", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						dialog.dismiss();
					}
				}).create().show();
	}

	/**
	 * 带三个按钮的Dialog
	 */
	public void showDialog3() {
		new AlertDialog.Builder(this).setTitle("提示")
				.setIcon(R.drawable.ic_launcher).setMessage("带三个按钮的Dialog~")
				.setPositiveButton("确定", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub

					}
				}).setNegativeButton("取消", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						dialog.dismiss();
					}
				}).setNeutralButton("忽略", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						dialog.dismiss();
					}
				}).create().show();
	}

	/**
	 * 带简单列表的Dialog
	 */
	public void showDialog4() {
		new AlertDialog.Builder(this).setTitle("带简单列表的Dialog~")
				.setIcon(R.drawable.ic_launcher).setItems(team, null)
				.setPositiveButton("确定", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub

					}
				}).setNegativeButton("取消", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						dialog.dismiss();
					}
				}).create().show();
	}

	private ListView singleList = null;

	/**
	 * 带单选列表的Dialog
	 */
	public void showDialog5() {
		AlertDialog alertDialog = new AlertDialog.Builder(this)
				.setTitle("带单选列表的Dialog~").setIcon(R.drawable.ic_launcher)
				.setSingleChoiceItems(team, 1, new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
					}
				}).setPositiveButton("确定", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						Toast.makeText(
								MainActivity.this,
								"您选择了第"
										+ (singleList.getCheckedItemPosition() + 1)
										+ "项:" + singleList.getAdapter()
										.getItem(singleList.getCheckedItemPosition()),
								Toast.LENGTH_SHORT).show();
					}
				}).setNegativeButton("取消", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						dialog.dismiss();
					}
				}).create();
		singleList = alertDialog.getListView();
		alertDialog.show();
	}

	private ListView muitList = null;

	/**
	 * 带多选列表的Dialog
	 */
	public void showDialog6() {
		AlertDialog alertDialog = new AlertDialog.Builder(this)
				.setTitle("带多选列表的Dialog~")
				.setIcon(R.drawable.ic_launcher)
				.setMultiChoiceItems(team, choice,
						new OnMultiChoiceClickListener() {

							@Override
							public void onClick(DialogInterface dialog,
									int which, boolean isChecked) {
								// TODO Auto-generated method stub
								choice[which] = isChecked;
							}
						}).setPositiveButton("确定", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						String s = "您选择了:";
						if (muitList.getCheckedItemPositions().size() > 0) {
							for (int i = 0; i < muitList.getCount(); i++) {
								if (muitList.getCheckedItemPositions().get(i)) {
									s += muitList.getAdapter().getItem(i)
											.toString()
											+ " ";
								}
							}
						} else {
							s += "0项";
						}
						Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT)
								.show();
					}
				}).setNegativeButton("取消", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						dialog.dismiss();
					}
				}).create();
		muitList = alertDialog.getListView();
		alertDialog.show();
	}

	/**
	 * 带输入框的Dialog
	 */
	public void showDialog7() {
		final EditText edittext = new EditText(this);

		new AlertDialog.Builder(this).setTitle("带输入框的Dialog~")
				.setIcon(R.drawable.ic_launcher).setView(edittext)
				.setPositiveButton("确定", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						Toast.makeText(MainActivity.this,
								"输入框中字符串是:" + edittext.getText().toString(),
								Toast.LENGTH_SHORT).show();
					}
				}).setNegativeButton("取消", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						dialog.dismiss();
					}
				}).create().show();
	}

	/**
	 * 带自定义布局的Dialog
	 */
	public void showDialog8() {
		View layout = getLayoutInflater().inflate(R.layout.login,
				(ViewGroup) findViewById(R.id.login));
		final EditText editId = (EditText) layout
				.findViewById(R.id.edit_login_id);
		final EditText editPass = (EditText) layout
				.findViewById(R.id.edit_login_pass);

		new AlertDialog.Builder(this).setTitle("带自定义布局的Dialog~")
				.setIcon(R.drawable.ic_launcher).setView(layout)
				.setPositiveButton("确定", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						Toast.makeText(
								MainActivity.this,
								"登录名是:" + editId.getText().toString()
										+ "\n密码是:"
										+ editPass.getText().toString(),
								Toast.LENGTH_SHORT).show();
					}
				}).setNegativeButton("取消", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						dialog.dismiss();
					}
				}).create().show();
	}
}

其中自定义布局AlertDialog中的login.xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/login"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="80dp"
            android:layout_height="wrap_content" 
            android:text="登录名称"
            android:textColor="#000000"
            android:textSize="15sp"
            android:textStyle="bold"/>
        
        <EditText
            android:id="@+id/edit_login_id"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="请输入用户名或邮箱" 
            />
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="80dp"
            android:layout_height="wrap_content" 
            android:text="登录密码"
            android:textColor="#000000"
            android:textSize="15sp"
            android:textStyle="bold"/>
        
        <EditText
            android:id="@+id/edit_login_pass"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="请输入您的密码" 
            android:password="true"
            />
    </LinearLayout>

</LinearLayout>

最后各个实例的截图如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值