Android用户界面之(Dialog)对话框

在Android中,启动一个对话框有三种方式:

1、定义一个新的activity,并将其主题设置为对话框风格
2、使用AlertDialog类,并且显示它
3、使用 Android的Dialog类的子类,并且显示它

现在学习AlertDialog.Builder创建各种形式的对话框。

用土司来显示效果,因为多次用到,所以将其抽象为一个方法。

   protected void showToast(String string) {   
       Toast.makeText(this, string, Toast.LENGTH_SHORT).show();   
   }

1.提示对话框

   public void onClick(View v) {   
       switch (v.getId()) {   
       case R.id.button1:   
           new AlertDialog.Builder(this)   
               .setTitle("这是一个最简单的对话框")   
               .setIcon(R.drawable.img1)   
               .setMessage("你好!!!")   
               .setPositiveButton("开始", new DialogInterface.OnClickListener() {   
                   @Override  
                   public void onClick(DialogInterface dialog, int which) {   
                       DialogActivity.this.showToast("你点击了开始按钮      "+ which);   
                   }   
               })   
               .setNeutralButton("暂停", new DialogInterface.OnClickListener() {   
                   @Override  
                   public void onClick(DialogInterface dialog, int which) {   
                       DialogActivity.this.showToast("你点击了暂停按钮      "+ which);   
                   }   
               })   
                  
               .setNegativeButton("退出", new DialogInterface.OnClickListener() {   
                   @Override  
                   public void onClick(DialogInterface dialog, int which) {   
                       DialogActivity.this.showToast("你点击了退出按钮 " + which);   
                   }   
               }).show();   
           break; 

2.列表对话框
对于这个对话框,我们用到了这个方法
setItem(),即将setMessage改成这个方法就可以了。

代码如下:其中items是一个成员变量。final String[] items = {"开始","暂停","退出"};

   case R.id.button2:   
       new AlertDialog.Builder(this)   
       .setTitle("选项列表对话框")   
       .setIcon(R.drawable.img2)   
       //items的第一个参数也可以接受itemID,所以可写在xml文件中   
       .setItems(items, new DialogInterface.OnClickListener() {   
           @Override  
           public void onClick(DialogInterface dialog, int which) {   
               DialogActivity.this.showToast("你点击了按钮 " + items[which]);   
           }   
       }).show();   
   break;

3.单选列表对话框

   case R.id.button3:   
       new AlertDialog.Builder(this)   
       .setTitle("带单选框的列表对话框")   
       .setIcon(R.drawable.img3)     
       //setSingleChoiceItems()的第二个参数是设置默认选项,选项索引从0开始,-1代表不选择任何选项。   
       .setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {   
           @Override  
           public void onClick(DialogInterface dialog, int which) {   
               DialogActivity.this.showToast("你点击了按钮 " + items[which]);   
               //需调用这个方法,使点击后对话框消失,不然一直不会消失的   
               dialog.cancel();     
           }   
       }).create().show();   
   break;

4.多选列表话框

   case R.id.button4:   
       new AlertDialog.Builder(this)   
       .setTitle("你的爱好有:")   
       .setIcon(R.drawable.img3)   
       .setMultiChoiceItems(R.array.string_array_name, null, new DialogInterface.OnMultiChoiceClickListener() {   
           @Override  
           public void onClick(DialogInterface dialog, int which, boolean isChecked) {   
               String[] array = DialogActivity.this.getResources().getStringArray(R.array.string_array_name);   
               String str;   
               if(isChecked) {   
                   number++;   
               }else {   
                   number--;   
               }   
               DialogActivity.this.showToast(array[which] + (isChecked ?" 选中了":" 取消了") );   
           }   
       })   
       .setPositiveButton("确定", new DialogInterface.OnClickListener() {   
               @Override  
               public void onClick(DialogInterface dialog, int which) {   
                   DialogActivity.this.showToast("你一共选择了      "+ number + "项");   
               }   
           }).show();   
   break;  

  这次,并没有直接用数组,而是在strings.xml中定义的一个数组资源

   <?xml version="1.0" encoding="utf-8"?>  
   <resources>  
        <string-array  name="string_array_name">  
           <item>健美操</item>  
           <item>跳舞</item>  
           <item>跑步</item>  
       </string-array>  
   </resources>  

5.自定义对话框
setView(view)方法来显示登录框。接受的参数为View(view,editText的组合),以LayoutInflater来实现。
要得到LayoutInflater(布局泵),只需要调用
LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
我们用inflater .inflater()用来找layout下xml布局文件,并且实例化。
类似于findVIewbyID,区别是一个得到整个布局,一个得到单个的组件。

代码如下:

   case R.id.button5:   
       LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
       View view = inflater.inflate(R.layout.dialog, null);   
     
       new AlertDialog.Builder(this)   
       .setTitle("登陆框")   
       .setIcon(R.drawable.img4)   
       .setView(view)   
       .setPositiveButton("确定", new DialogInterface.OnClickListener() {   
           @Override  
           public void onClick(DialogInterface dialog, int which) {   
               DialogActivity.this.showToast("正在登录,请稍后。。。");   
           }   
       }).show();  

res/layout/dialog.xml布局为两个TextView,两个EditText,如下:

  <?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="fill_parent"  
     Android:orientation="vertical">  
       <TextView     
       Android:layout_width="wrap_content"    
       Android:layout_height="wrap_content"    
       Android:text="账号"  
         
       />  
     <EditText     
       Android:layout_width="fill_parent"    
       Android:layout_height="wrap_content"    
       Android:id="@+id/username"  
       />  
      <TextView     
       Android:layout_width="wrap_content"    
       Android:layout_height="wrap_content"    
       Android:text="密码"  
       />  
       <EditText     
       Android:layout_width="fill_parent"    
       Android:layout_height="wrap_content"    
       Android:id="@+id/password"  
       />  
   </LinearLayout>
posted @ 2012-08-22 11:30  日光之下无新事  阅读(572)  评论(0编辑  收藏  举报