【Android】AlertDialog PopupWindow对话框

Android最常见的对话框是

AlertDialog弹窗以及PopupWindow浮动对话框


一 . AlertDialog对话框

-> 带消息、带按钮的提示对话框
-> 带列表、带按钮的列表对话框
-> 带多个单选列表项、N个按钮的对话框
-> 带多个多选列表项、N个按钮的对话框
另外AlertDialog还可以创建自定义对话框

使用AlertDialog创建对话框的大致步骤是

1)创建AlertDialog.Builder对象,该对象是AlertDialog的创建器
2)调用AlertDialog.Builder的方法设置图标、标题、内容,以及按钮
3)调用AlertDialog.Builder的create() 方法创建对话框
4)调用AlertDialog.Builder的show() 方法显示对话框

1》显示提示消息的对话框



                Builder builder=new AlertDialog.Builder(DialogActivity.this);
                builder.setIcon(R.drawable.ic_launcher);
                builder.setTitle("消息对话框");
                builder.setMessage("一个简单提示");
                builder.setPositiveButton("确定", new OnClickListener(){

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        Toast.makeText(DialogActivity.this, "点击了确定",1).show();
                    }
                    
                });
                builder.setNegativeButton("取消", new OnClickListener(){

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        Toast.makeText(DialogActivity.this, "点击了取消",1).show();
                    }
                    
                });
                builder.create().show();

2》列表对话框



                Builder builder=new AlertDialog.Builder(DialogActivity.this);
                builder.setIcon(R.drawable.ic_launcher);
                builder.setTitle("列表对话框");
                builder.setItems(new String[]{  "红色","蓝色","绿色" }, new OnClickListener(){

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        TextView textView=(TextView)findViewById(R.id.textView_show_color);
                        switch(which){
                        case 0:
                            textView.setBackgroundColor(Color.RED);break;
                        case 1:
                            textView.setBackgroundColor(Color.BLUE);break;
                        case 2:
                            textView.setBackgroundColor(Color.GREEN);break;
                        default:
                            textView.setBackgroundColor(Color.BLACK);
                        }
                    }
                    
                });
                
                builder.create().show();

3》单选对话框



                int choose=0;
                Builder builder=new AlertDialog.Builder(DialogActivity.this);
                builder.setIcon(R.drawable.ic_launcher);
                builder.setTitle("列表单选对话框");
                
                builder.setSingleChoiceItems(new String[]{ "灰色","孔雀蓝","黄色" }, choose,new OnClickListener(){

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

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        TextView textView=(TextView)findViewById(R.id.textView_show_color);
                        switch(choose){
                        case 0:
                            textView.setBackgroundColor(Color.GRAY);break;
                        case 1:
                            textView.setBackgroundColor(Color.CYAN);break;
                        case 2:
                            textView.setBackgroundColor(Color.YELLOW);break;
                        default:
                            textView.setBackgroundColor(Color.BLACK);  
                        }
                    }
                    
                });
                builder.create().show();

4》多选对话框




                Builder builder=new AlertDialog.Builder(DialogActivity.this);
                final String myColor[]={ "苹果","香蕉","橘子" };
                final boolean isChoose[]={true,false,true};
                builder.setIcon(R.drawable.ic_launcher);
                builder.setTitle("列表多选对话框");
                
                builder.setMultiChoiceItems(myColor,isChoose, new OnMultiChoiceClickListener(){

                    //选中某一选项的监听事件
                    @Override
                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                        // TODO Auto-generated method stub
                        Toast.makeText(DialogActivity.this, myColor[which]+isChecked,1).show();
                    }
                    
                });
                builder.setPositiveButton("确定", null);
                builder.create().show();



5》自定义对话框



Java代码

                Builder builder=new AlertDialog.Builder(DialogActivity.this);
                builder.setIcon(R.drawable.ic_launcher);
                builder.setTitle("自定义登入对话框");
                
                TableLayout loginForm=(TableLayout)getLayoutInflater().inflate(R.layout.login, null);
                builder.setView(loginForm);//设置对话框为自定义布局
                
                builder.setPositiveButton("登入", new OnClickListener(){

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                        
                    }
                    
                });
                builder.setNegativeButton("取消", new OnClickListener(){

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

登入框的布局文件R.layout.login, 可自己随意定义

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical">
    <TableRow >
        <TextView 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="用户名:"
            android:textSize="10pt"/>
        <EditText 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请填写账号"
            android:selectAllOnFocus="true"/>
    </TableRow>
    
    <TableRow >
        <TextView 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="密码:"
            android:textSize="10pt"/>
        <EditText 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:password="true"/>"
    </TableRow>
    
    <TableRow >
        <TextView 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="电话号码:"
            android:textSize="10pt"/>
        <EditText 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="填写电话号码"
            android:phoneNumber="true"
            android:selectAllOnFocus="true"/>
    </TableRow>

    <TableRow >
        <Button 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="注册"/>
    </TableRow>
</TableLayout>


二. PopupWindow浮动对话框

界面上定义一个Button



点击后PopupWindow挨着button出现



        View root=this.getLayoutInflater().inflate(R.layout.popup, null);
        //创建popupWindows对象
        final PopupWindow popup=new PopupWindow(root,280,200);
        Button button=(Button)findViewById(R.id.button_show_popup);
        button.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                popup.showAsDropDown(v);//显示对话框
            }
            
        });
        
        root.findViewById(R.id.button_close).setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                popup.dismiss();//关闭对话框
            }
            
        });

PopupWIndow的布局R.layout.popup

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#2E2E2E">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />


    <CheckedTextView
        android:id="@+id/checkedTextView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CheckedTextView" />

    <Button
        android:id="@+id/button_close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="close" />

</LinearLayout>

三. 总结

AlertDialog和PopupWindow基本能满足Android开发中对话框的需求,
另外安卓还提供了DatePickerDialog(日期选择对话框)和TimePickerDialog(时间选择对话框),以及ProgressDialog(进度对话框)







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值