Android基础之Dialog的使用

Android提供了丰富的对话框支持,他有以下4种常用对话框形式:

1、AlertDialog:功能最丰富,应用最广的对话框
2、ProgressDialof:进度条对话框
3、DatePickerDialog:日期选择对话框
4、TimePickerDialog:时间选择对话框

这四种对话框中的AlertDialog是其他三种对话框的父类;下面是他们的继承关系:
这里写图片描述

使用AlertDialog创建对话框:

AlertDialog生成的对话框有如下几个区域:
这里写图片描述

使用对话框其实就是创建这几个区域,所以创建对话框就要经过这么几个步骤:

1、创建AlertDialog.Builder对象
2、调用AlertDialog.Builder对象的setTitle()或setCustomTitle()方法设置标题
3、调用setIcon()方法设置图标
4、调用相关的方法设置内容区
5、调用setPositiveButton()、setNegativeButton()方法或setNeutralButton()方法添加按钮区的按钮
6、调用create()方法创建AlterDialog对象,最后调用show()方法将对话框显现出来

这几个步骤中第四步,能创建多种不同内容的对话框,创建内容的方法有很多:

setMessage():设置最简单的文本对话框
setItems():设置对话框内容为简单列表项
setSingleChoiceItems():设置对话框内容为单选列表项
setMultiChoiceItems():设置对话框内容为多选列表项
setAdapter():设置内容为自定义列表项
setView():设置对话框内容为自定义View

下面给出创建简单的退出当前Activity的对话框的实例:

布局文件中定义一个退出按钮:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="退出" />
</LinearLayout>

代码部分:

public class MainActivity extends Activity {
    private AlertDialog.Builder builder;
    private Button btn;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn= (Button) findViewById(R.id.btn1);
        btn1.setOnClickListener(new android.view.View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                createDialog();
            }
        });
        private void createDialog() {
        // TODO Auto-generated method stub
        builder = new AlertDialog.Builder(this);
        builder.setTitle("退出Activity");
        builder.setIcon(R.drawable.ic_launcher);
        builder.setMessage("是否退出");
        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
                MainActivity.this.finish();
            }
        });
        builder.create();
        builder.show();
    }

点击退出按钮后弹出对话框效果如下:
这里写图片描述
点击确定退出程序。

创建简单列表项对话框的代码:

public class SetItemActivity extends Activity {

    private AlertDialog.Builder builder;
    private TextView tv;
    private Button btn;
    private String[] books = {"java","Android"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_set_item);
        builder = new AlertDialog.Builder(this);
        tv = (TextView) findViewById(R.id.item_tv);
        btn = (Button) findViewById(R.id.item_btn);
        btn.setOnClickListener(new android.view.View.OnClickListener() {

            @Override
            public void onClick(View v) {
                createDialog();

            }
        });
    }
    private void createDialog() { 
        // TODO Auto-generated method stub
        builder = new AlertDialog.Builder(this);
        builder.setTitle("一个Dialog");
        builder.setIcon(R.drawable.ic_launcher);
        createcontent();
        builder.setPositiveButton("取消", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                tv.setText("你好啊"+new java.util.Date());
            }
        });
        builder.setNegativeButton("确定",new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                tv.setText("asdf");
            }
        });
        builder.create();
        builder.show();
    }
    private void createcontent() {
        builder.setItems(books, new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                tv.setText(books[which]);               
            }
        });

    }
}

这个程序的布局文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.dialog.SetItemActivity" >

    <TextView
        android:id="@+id/item_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/item_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="简单列表项对话框" />

</LinearLayout>

单机按钮后出现如下效果:
这里写图片描述

单击每个ltem可以改变textView中的Text。

接着是自定义列表项对话框的例子,这里做了个和简单列表项效果相同的列表项对话框:

public class SetAdapterActivity extends Activity {

    private String[] items={"java","android","数据库"};
    private AlertDialog.Builder builder;
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_set_adapter);
        tv = (TextView)findViewById(R.id.adapter_tv);
        createDialog();

    }

    private void createDialog() {
        // TODO Auto-generated method stub
        builder = new AlertDialog.Builder(this);
        builder.setTitle("一个Dialog");
        builder.setIcon(R.drawable.ic_launcher);
        createcontent();
        builder.setPositiveButton("取消", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                tv.setText("你好啊");
            }
        });
        builder.setNegativeButton("确定",new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                tv.setText("asdf");
            }
        });
        builder.create();
        builder.show();
    }
    private void createcontent() {
        builder.setAdapter
            (new ArrayAdapter<String>
                (this,android.R.layout.simple_list_item_1,items), null);
    }
}

布局文件只有一个按钮,不在给出。
对于单选列表项,setSingleChoiceItems()方法既可以传入数组,也可以传入Cursor作为对象,还可以传入ListAdapter作为参数,只是如果传入的是ListAdapter,那么列表项组件则由ListAdapter提供:
下面使用数组创建一个简单的DiaLog:

btn6.setOnClickListener(new android.view.View.OnClickListener(){

            @Override
            public void onClick(View v) {
                builder = new AlertDialog.Builder(MainActivity.this)
                        .setTitle("单选对话框")
                        .setIcon(R.drawable.ic_launcher)
                        .setSingleChoiceItems
                            (new String []{"java","oracle","web"}, 
                                    //0为默认的单选位置
                                    0, new OnClickListener() {

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

        });

点击该按钮出现如下对话框:
这里写图片描述

多选项对话框与单选对话框类似,只是第二个参数是boolean类型的数组,该参数有两个作用:
1、设置初始化时选中那些列表项
2、能动态的获取到列表项的选中状态
对话框的setView()方法只要传入一个定义好的View,创建的对话框就能显示自定义的View。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值