Chendd's Blog

世界上没有什么事情是一行代码不能解决的。如果有,那就两行。

Android学习日记3--常用控件Dialog

常用控件

9、Dialog

       我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择。这些功能我们叫它Android Dialog对话框

对话框,要创建对话框之前首先要创建Builder类创建者,Builder是AlertDialog的子类,而且还是它的内部类。

1
2
3
setPositiveButton //设置最左边的按钮
setNeutralButton //设置中间的按钮
setNegativeButton //设置最右边的按钮
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
builder = new Builder(MainActivity.this);
        builder.setIcon(android.R.drawable.ic_dialog_info);
        builder.setTitle("dialg标题");
        //builder.setMessage("dialog对话框内容");

        builder.setPositiveButton("Yes", new OnClickListener() {


            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub

            }
        });

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

        builder.setNegativeButton("No", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub

            }
        });

        builder.setView(new CheckBox(this));



        builder.show();

image

由于 Builder 设计模式特性,上面代码也可以这样简写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
new Builder(this)
.setIcon(android.R.drawable.ic_dialog_info)
.setTitle("dialg标题")
.setMessage("dialog对话框内容")
.setPositiveButton("yes", new OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub

    }
})
.setNegativeButton("no", new OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub

    }
})
.setView(new CheckBox(this))
.create()
.show();

builder.setView(new CheckBox(this));只能添加一个组件

如果添加多个组件,会被后面的覆盖掉

添加某些一组组件,还有对应函数

添加单选框

1
2
3
4
5
6
7
8
builder.setSingleChoiceItems(new String[] {"单选","单选"}, 1, new OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // TODO Auto-generated method stub

    }
});

image

添加复选框

1
2
3
4
5
6
7
8
builder.setMultiChoiceItems(new String[] {"多选","多选"}, new boolean[] {false,true}, new OnMultiChoiceClickListener() {

    @Override
    public void onClick(DialogInterface arg0, int arg1, boolean arg2) {
        // TODO Auto-generated method stub

    }
});

image

添加列表

1
2
3
4
5
6
7
8
builder.setItems(new String[] {"item1","item2","item3"}, new OnClickListener() {

    @Override
    public void onClick(DialogInterface arg0, int arg1) {
        // TODO Auto-generated method stub

    }
});

image

此外,还可以自定义布局文件,当作一个组件用setView()添加

1
2
3
LayoutInflater inflater = getLayoutInflater();
View layoutView = inflater.inflate(R.layout.dialogmain, (ViewGroup)findViewById(R.id.myLayout));
builder.setView(layoutView);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_height="wrap_content" android:layout_width="wrap_content"
 android:background="#ffffffff" android:orientation="horizontal"
 android:id="@+id/myLayout">
 <TextView
     android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="TextView" />
 <EditText
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
    />
 <Button
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:text="btn1"
    />
 <Button
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:text=" btn2"
    />
</LinearLayout>

image

Android API 支持下列类型的对话框对象:

  • 警告对话框 AlertDialog: 一个可以有0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以创建大多数的交互界面, 是推荐的类型.
  • 进度对话框 ProgressDialog: 显示一个进度环或者一个进度条. 由于它是AlertDialog的扩展, 所以它也支持按钮.
  • 日期选择对话框 DatePickerDialog: 让用户选择一个日期.
  • 时间选择对话框 TimePickerDialog: 让用户选择一个时间.

如果你希望自定义你的对话框, 可以扩展Dialog类

Comments