Android 对话框(Dialog)大全 建立你自己的对话框


 

下面是几种对话框的效果:

 

 

(注意:按1下[Back]按键同样会出现该对话框)

图一

 

 

图二

 

 

图三

 

 

图四

 

图五

 

图六

 

图七

 

图八

 

 


以上对话框效果对应的实现代码:

 

图一效果具体代码

 

main.xml布局配置

<Button  
    android:id="@+id/idButtonDialog1"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Dialog1"
    android:onClick="clickButtonDialog1"
    />


 

Activity代码

 

/**
     * 重载当前Activity的[键盘按下]事件处理方法.
     */
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    	//KeyEvent.KEYCODE_BACK:键盘上的[back]按键
    	//捕获按键:按下[back]键并且没有重复
    	if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
    		showDialog1();
    	}
		return false;
    }
    

	public void clickButtonDialog1(View v){
		showDialog1();
    }
	
	public void showDialog1(){
		AlertDialog.Builder builder = new Builder(this)
    	.setMessage("确认退出吗?")//设置对话框内容
    	.setTitle("提示")//设置对话框标题
    	.setPositiveButton("确定", new OnClickListener() {//设置对话框[肯定]按钮
    		@Override
    		public void onClick(DialogInterface dialog, int which) {
    			dialog.dismiss();//关闭对话框
    			finish();//结束当前Activity
    		}
    	})
    	.setNegativeButton("取消", new OnClickListener() {//设置对话框[否定]按钮
    		@Override
    		public void onClick(DialogInterface dialog, int which) {
    			dialog.dismiss();//关闭对话框
    		}
    	});
		builder.create().show();//创建对话框并且显示该对话框
	}

 

图二效果具体代码

 

main.xml布局配置

<Button  
    android:id="@+id/idButtonDialog2"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Dialog2"
    android:onClick="clickButtonDialog2"
    />

 

 

 

Activity代码

 

public void clickButtonDialog2(View v){
		showDialog2();
    }
    
	public void showDialog2(){
		final Context context = this;
		Dialog dialog = new AlertDialog.Builder(context)
		.setIcon(android.R.drawable.btn_star)//设置对话框图标
		.setTitle("喜好调查")//设置对话框标题
		.setMessage("你喜欢李连杰的电影吗?")//设置对话框内容
		.setPositiveButton("很喜欢", new OnClickListener(){//设置对话框[肯定]按钮
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(context, "我很喜欢他的电影。", Toast.LENGTH_LONG).show();

			}
		})
		.setNegativeButton("不喜欢", new OnClickListener(){//设置对话框[否定]按钮
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(context, "我不喜欢他的电影。", Toast.LENGTH_LONG).show();
			}
		})
		.setNeutralButton("一般", new OnClickListener(){//设置对话框[中性]按钮
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(context, "谈不上喜欢不喜欢。", Toast.LENGTH_LONG).show();
			}
		}).create();//创建对话框
		
		dialog.show();//显示对话框
	}

 

图三效果具体代码

 

main.xml布局配置

<Button  
    android:id="@+id/idButtonDialog3"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Dialog3"
    android:onClick="clickButtonDialog3"
    />

 

 

Activity代码

public void clickButtonDialog3(View v){
		showDialog3();
    }
    
	public void showDialog3(){
		final Context context = this;
		//定义1个文本输入框
		final EditText userName = new EditText(this);
		//创建对话框
		new AlertDialog.Builder(context)
		.setTitle("请输入")//设置对话框标题
		.setIcon(android.R.drawable.ic_dialog_info)//设置对话框图标
		.setView(userName)//为对话框添加要显示的组件
		.setPositiveButton("确定", new OnClickListener(){//设置对话框[肯定]按钮
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(context, "userName="+userName.getText().toString(), Toast.LENGTH_LONG).show();
			}
		})
		.setNegativeButton("取消", null)//设置对话框[否定]按钮
		.show();
	}

 

 

 

 

图四效果具体代码

 

main.xml布局配置


<Button  
    android:id="@+id/idButtonDialog4"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Dialog4"
    android:onClick="clickButtonDialog4"
    />


 

 

Activity代码

public void clickButtonDialog4(View v){
		showDialog4();
    }
    
	public void showDialog4(){
		final Context context = this;
		//定义单选框选项
		String[] singleChoiceItems = {"Item1","Item2"};
		int defaultSelectedIndex = 1;//单选框默认值:从0开始
		//创建对话框
		new AlertDialog.Builder(context)
		.setTitle("单选框")//设置对话框标题
		.setIcon(android.R.drawable.ic_dialog_info)//设置对话框图标
		.setSingleChoiceItems(singleChoiceItems, defaultSelectedIndex, new OnClickListener(){
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(context, "Item is "+which, Toast.LENGTH_LONG).show();
			}
		})
		.setPositiveButton("确定", null)//设置对话框[肯定]按钮
		.setNegativeButton("取消", null)//设置对话框[否定]按钮
		.show();
	}

图五效果具体代码

 

main.xml布局配置


<Button  
    android:id="@+id/idButtonDialog5"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Dialog5"
    android:onClick="clickButtonDialog5"
    />

 

Activity代码

public void clickButtonDialog5(View v){
		showDialog5();
    }
    
	public void showDialog5(){
		final Context context = this;
		//定义复选框选项
		String[] multiChoiceItems = {"Item1","Item2"};
		boolean[] defaultSelectedStatus = {false,true};//复选框默认值:false=未选;true=选中
		//创建对话框
		new AlertDialog.Builder(context)
		.setTitle("复选框")//设置对话框标题
		.setMultiChoiceItems(multiChoiceItems, defaultSelectedStatus, new OnMultiChoiceClickListener(){
			@Override
			public void onClick(DialogInterface dialog, int which,
					boolean isChecked) {
				Toast.makeText(context, "Item"+which+"'s status  is "+isChecked+".", Toast.LENGTH_LONG).show();
			}
		})
		.setPositiveButton("确定", null)//设置对话框[肯定]按钮
		.setNegativeButton("取消", null)//设置对话框[否定]按钮
		.show();
	}

 

图六效果具体代码

 

main.xml布局配置

<Button  
    android:id="@+id/idButtonDialog6"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Dialog6"
    android:onClick="clickButtonDialog6"
    />

 

 

Activity代码

public void clickButtonDialog6(View v){
		showDialog6();
    }
    
	public void showDialog6(){
		final Context context = this;
		//定义列表选项
		String[] items = {"Item1","Item2"};
		//创建对话框
		new AlertDialog.Builder(context)
		.setTitle("列表")//设置对话框标题
		.setItems(items, new OnClickListener(){
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(context, "Item is "+which+".", Toast.LENGTH_LONG).show();
			}
		})
		.setNegativeButton("取消", new OnClickListener(){
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(context, "Button is "+which+" click.", Toast.LENGTH_LONG).show();
			}
		})//设置对话框[否定]按钮
		.show();
	}

 

图七效果具体代码

 

main.xml布局配置

<Button  
    android:id="@+id/idButtonDialog7"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Dialog7"
    android:onClick="clickButtonDialog7"
    />

另外需要布局配置文件 main_dialog_custom.xml ,内容:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/customDialog"
    >
<TextView  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="姓名:"
    />
<EditText  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text=""
    android:minWidth="200dip"
    android:id="@+id/dialogCustomEditTextUserName"
    />
</LinearLayout>

 

 

 

Activity代码

public void clickButtonDialog7(View v){
		showDialog7();
    }
    
	
	public void showDialog7(){
		final Context context = this;
		
		//初始化自定义布局参数
		LayoutInflater layoutInflater = getLayoutInflater();
		//为了能在下面的OnClickListener中获取布局上组件的数据,必须定义为final类型.
		final View customLayout = layoutInflater.inflate(R.layout.main_dialog_custom, (ViewGroup)findViewById(R.id.customDialog));
		
		//创建对话框
		new AlertDialog.Builder(context)
		.setTitle("自定义布局")//设置对话框标题
		.setView(customLayout)//为对话框添加组件
		.setPositiveButton("确定", new OnClickListener(){
			@Override
			public void onClick(DialogInterface dialog, int which) {
				//获取自定义布局上的输入框的值
				EditText customDialogUserName = (EditText)customLayout.findViewById(R.id.dialogCustomEditTextUserName);
				Toast.makeText(context, "姓名="+customDialogUserName.getText().toString(), Toast.LENGTH_SHORT).show();
			}
		})//设置对话框[肯定]按钮
		.setNegativeButton("取消", null)//设置对话框[否定]按钮
		.show();
	}

 

图八效果具体代码

 

说明:图八和图七理论上一样的,都是自定义布局对话框。不过,图八方式可以用来替换手机的系统选项菜单风格。

 

main.xml配置

<Button  
    android:id="@+id/idButtonDialog8"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Dialog8"
    android:onClick="clickButtonDialog8"
    />

menu_gridview.xml配置


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<GridView
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:numColumns="4"
    android:verticalSpacing="10dip"
    android:horizontalSpacing="10dip"
    android:stretchMode="columnWidth"
    android:gravity="center"
    />
</LinearLayout>

menu_item.xml配置


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/RelativeLayout_Item"
	android:layout_width="fill_parent" android:layout_height="wrap_content"
	android:paddingBottom="5dip"
	>
	<ImageView 
		android:id="@+id/item_image"
		android:layout_centerHorizontal="true" 
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		/>
	<TextView 
		android:layout_below="@id/item_image" 
		android:id="@+id/item_text"
		android:layout_centerHorizontal="true" 
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" 
		/>
</RelativeLayout>


 

Activity代码

//定义选项菜单
    private String[] allOptionsMenuTexts = {"删除","保存","帮助","添加","详细","发送","电话","照相"};
    private int[] allOptionsMenuOrders = {5,2,6,1,4,3,7,8};
    private int[] allOptionsMenuIds = {Menu.FIRST+1,Menu.FIRST+2,Menu.FIRST+3,Menu.FIRST+4,Menu.FIRST+5,Menu.FIRST+6,Menu.FIRST+7,Menu.FIRST+8};
    private int[] allOptionsMenuIcons = {
    		android.R.drawable.ic_menu_delete,
    		android.R.drawable.ic_menu_edit,
    		android.R.drawable.ic_menu_help,
    		android.R.drawable.ic_menu_add,
    		android.R.drawable.ic_menu_info_details,
    		android.R.drawable.ic_menu_send,
    		android.R.drawable.ic_menu_call,
    		android.R.drawable.ic_menu_camera
    		};
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_dialog);
    }
    

    
    public void clickButtonDialog8(View v){
		showDialog8();
    }
    
	
	public void showDialog8(){
		final Context context = this;
		
		//获取自定义布局
		LayoutInflater layoutInflater = getLayoutInflater();
		View menuView = layoutInflater.inflate(R.layout.menu_gridview, null);
		
		//获取GridView组件并配置适配器
		GridView gridView = (GridView)menuView.findViewById(R.id.gridview);
		SimpleAdapter menuSimpleAdapter = createSimpleAdapter(allOptionsMenuTexts,allOptionsMenuIcons);
		gridView.setAdapter(menuSimpleAdapter);
		gridView.setOnItemClickListener(new OnItemClickListener(){
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Toast.makeText(context, "菜单["+allOptionsMenuTexts[position]+"]点击了.", Toast.LENGTH_SHORT).show();
			}
		});
		
		//创建对话框并显示
		new AlertDialog.Builder(context).setView(menuView).show();
	}
	
	public SimpleAdapter createSimpleAdapter(String[] menuNames,int[] menuImages){
		List<Map<String,?>> data = new ArrayList<Map<String,?>>();
		String[] fromsAdapter = {"item_text","item_image"};
		int[] tosAdapter = {R.id.item_text,R.id.item_image};
		for(int i=0;i<menuNames.length;i++){
			Map<String,Object> map = new HashMap<String,Object>();
			map.put(fromsAdapter[0], menuNames[i]);
			map.put(fromsAdapter[1], menuImages[i]);
			data.add(map);
		}
		
		SimpleAdapter SimpleAdapter = new SimpleAdapter(this, data, R.layout.menu_item, fromsAdapter, tosAdapter);
		return SimpleAdapter;
	}