Android学习之AlertDialog [转]

转自http://blog.csdn.net/hellogv/

 

       时隔一年,又要准备做Android的开发了,最近复习和整理一下Android的知识。这次要说的是AlertDialog,这种对话框会经常遇到。AlertDialog跟WIN32开发中的Dialog不一样,AlertDialog是非阻塞的,而阻塞的对话框用的是PopupWindow。

       先贴出程序运行的截图:

main.xml的源码:

 
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="fill_parent"
 5     android:layout_height="fill_parent"
 6     >
 7 
 8 <Button 
 9     android:id="@+id/Button01" 
10     android:layout_height="wrap_content" 
11     android:text="非Layout型对话框" 
12     android:layout_width="fill_parent">
13 </Button>
14 
15 <Button 
16     android:id="@+id/Button02" 
17     android:layout_height="wrap_content" 
18     android:text="Layout型对话框" 
19     android:layout_width="fill_parent">
20 </Button>
21 
22 <View android:id="@+id/View01" 
23     android:layout_width="wrap_content"                    
24     android:layout_height="wrap_content">
25 </View>
26 
27 </LinearLayout>

 

下图是非Layout型对话框,直接使用AlertDialog

 

下图是使用了Layout的对话框,可以自定义控件,实现更复杂的对话框

dialoglayout.xml的源码:

 

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:orientation="vertical">
    <EditText android:layout_height="wrap_content"
        android:layout_width="fill_parent" android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip" android:textAppearance="?android:attr/textAppearanceMedium" android:id="@+id/edtInput"/>
</LinearLayout>

程序源码:

  1 package com.testAlertDialog;
  2 
  3 import android.app.Activity;
  4 import android.app.AlertDialog;
  5 import android.content.Context;
  6 import android.content.DialogInterface;
  7 import android.os.Bundle;
  8 import android.view.Gravity;
  9 import android.view.LayoutInflater;
 10 import android.view.View;
 11 import android.view.View.OnClickListener;
 12 import android.widget.Button;
 13 import android.widget.EditText;
 14 import android.widget.PopupWindow;
 15 
 16 
 17 public class testAlertDialog extends Activity {
 18     Button btnShowDialog;
 19     Button btnShowDialog_Layout;
 20     /** Called when the activity is first created. */
 21     @Override
 22     public void onCreate(Bundle savedInstanceState) {
 23         super.onCreate(savedInstanceState);
 24         setContentView(R.layout.main);
 25         //定义按钮
 26         btnShowDialog=(Button)this.findViewById(R.id.Button01);
 27         btnShowDialog.setOnClickListener(new ClickEvent());
 28         btnShowDialog_Layout=(Button)this.findViewById(R.id.Button02);
 29         btnShowDialog_Layout.setOnClickListener(new ClickEvent());
 30     }
 31     
 32     
 33     //统一处理按键事件
 34     class ClickEvent implements OnClickListener{
 35 
 36         @Override
 37         public void onClick(View v) {
 38             // TODO Auto-generated method stub
 39             if(v==btnShowDialog)
 40                 showDialog(testAlertDialog.this);
 41                 
 42             else if(v==btnShowDialog_Layout)
 43                 showDialog_Layout(testAlertDialog.this);
 44             
 45         }
 46 
 47     }
 48 
 49     //显示基本的AlertDialog
 50     private void showDialog(Context context) {
 51         AlertDialog.Builder builder = new AlertDialog.Builder(context);
 52         builder.setIcon(R.drawable.icon);
 53         builder.setTitle("Title");
 54         builder.setMessage("Message");
 55         builder.setPositiveButton("Button1",
 56                 new DialogInterface.OnClickListener() {
 57                     public void onClick(DialogInterface dialog, int whichButton) {
 58                         setTitle("点击了对话框上的Button1");
 59                     }
 60                 });
 61         builder.setNeutralButton("Button2",
 62                 new DialogInterface.OnClickListener() {
 63                     public void onClick(DialogInterface dialog, int whichButton) {
 64                         setTitle("点击了对话框上的Button2");
 65                     }
 66                 });
 67         builder.setNegativeButton("Button3",
 68                 new DialogInterface.OnClickListener() {
 69                     public void onClick(DialogInterface dialog, int whichButton) {
 70                         setTitle("点击了对话框上的Button3");
 71                     }
 72                 });
 73         builder.show();
 74     }
 75 
 76 
 77     //显示基于Layout的AlertDialog
 78     private void showDialog_Layout(Context context) {
 79         LayoutInflater inflater = LayoutInflater.from(this);
 80         final View textEntryView = inflater.inflate(
 81                 R.layout.dialoglayout, null);
 82         final EditText edtInput=(EditText)textEntryView.findViewById(R.id.edtInput);
 83         final AlertDialog.Builder builder = new AlertDialog.Builder(context);
 84         builder.setCancelable(false);
 85         builder.setIcon(R.drawable.icon);
 86         builder.setTitle("Title");
 87         builder.setView(textEntryView);
 88         builder.setPositiveButton("确认",
 89                 new DialogInterface.OnClickListener() {
 90                     public void onClick(DialogInterface dialog, int whichButton) {
 91                         setTitle(edtInput.getText());
 92                     }
 93                 });
 94         builder.setNegativeButton("取消",
 95                 new DialogInterface.OnClickListener() {
 96                     public void onClick(DialogInterface dialog, int whichButton) {
 97                         setTitle("");
 98                     }
 99                 });
100         builder.show();
101     }
102 }

 

 

posted on 2013-04-19 11:51  林盛  阅读(167)  评论(0)    收藏  举报