Android开发学习教程(11)- Android AlertDialog对话框用法和属性
—— 不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地接近幸福。——宫崎骏
上一篇我们讲了进度条控件ProgressBar的基本用法,这里来学习对话框AlertDialog的基本用法。
AlertDialog是什么
AlertDialog是一个Android自带的提示对话框。
AlertDialog有什么用
AlertDialog一般用来显示比较简单的提示对话框,比如只有标题、内容、几个按钮的对话框。
AlertDialog怎么用
继续基于上一篇的项目,我们增加几个对话框AlertDialog:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".TestActivity"> <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.0"> ... ... ... <LinearLayout android:id="@+id/layout1" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="@+id/progress_horizontal3" app:layout_constraintTop_toBottomOf="@+id/progress_horizontal3"> <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="对话框1" /> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="对话框2" /> <Button android:id="@+id/btn3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="对话框3" /> <Button android:id="@+id/btn4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="对话框4" /> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> </ScrollView></androidx.constraintlayout.widget.ConstraintLayout>上面加了四个按钮,点击每个分别会弹出对话框,我们看点击第一个按钮弹出来的对话框,这种对话框的特点是显示的信息非常简单,标题+内容+1-3个按钮,标题设置了就显示,没设置就不显示,按钮也是一样,如下:
对应的对话框代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
new AlertDialog.Builder(TestActivity.this) .setTitle("系统提示") .setMessage("确定删除?") .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(TestActivity.this, "点击了取消", Toast.LENGTH_SHORT).show(); } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(TestActivity.this, "点击了确定", Toast.LENGTH_SHORT).show(); } }).show();第二种对话框,特点是标题+非常简单的列表样式对话框,标题设置了就显示,没设置就不显示,只限如下图这种纯简单文字的列表:
对应的对话框代码:
1
2
3
4
5
6
7
8
9
new AlertDialog.Builder(TestActivity.this) .setTitle("要发送给") .setItems(str, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(TestActivity.this, "点击了 " + str[which], Toast.LENGTH_SHORT).show(); } }) .show();第三种对话框,标题+xml布局文件+1-3个按钮,标题设置了就显示,没设置就不显示,按钮也是一样,如图:
对应的对话框代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
new AlertDialog.Builder(TestActivity.this) .setTitle("Apple ID 登录") .setView(R.layout.dialog_my1) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(TestActivity.this, "点击了取消", Toast.LENGTH_SHORT).show(); } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(TestActivity.this, "点击了确定", Toast.LENGTH_SHORT).show(); } }).show();布局文件:
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
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <EditText android:id="@+id/edittext1" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg_rectangle_c8c8c8_2" android:hint="请输入账号" android:padding="10dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/edittext2" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg_rectangle_c8c8c8_2" android:hint="请输入密码" android:inputType="textPassword" android:padding="10dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/edittext1" /></androidx.constraintlayout.widget.ConstraintLayout>第四种对话框,也是我们最常用的自定义样式对话框,这种对话框从头到尾都是通过布局文件、style设置来自定义样式的,如图:
对应的对话框代码:
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
class MyDialog extends Dialog { public MyDialog(Context context) { super(context, R.style.MyDialog); setContentView(R.layout.dialog_my2); getWindow().getAttributes().gravity = Gravity.CENTER; WindowManager.LayoutParams lp = getWindow().getAttributes(); DisplayMetrics metrics = TestActivity.this.getResources().getDisplayMetrics(); lp.width = (int) (metrics.widthPixels * 0.8f); getWindow().setAttributes(lp); findViewById(R.id.tv_left).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); findViewById(R.id.tv_right).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); }}布局文件:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg_rectangle_white_12" tools:context=".MainActivity"> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="微信想访问您的照片" android:textColor="#222222" android:textSize="16sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/tv_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="6dp" android:text="请点击好以允许访问。" android:textColor="#666666" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_title" /> <TextView android:id="@+id/tv_2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginTop="14dp" android:layout_marginRight="30dp" android:text="若不允许,您将无法在微信中给好友发送照片、保存照片,也无法在朋友圈中发表照片。" android:textColor="#666666" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_1" /> <View android:id="@+id/view1" android:layout_width="match_parent" android:layout_height="1px" android:layout_marginTop="30dp" android:background="#cccccc" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_2" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/view1"> <TextView android:id="@+id/tv_left" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:paddingTop="10dp" android:paddingBottom="10dp" android:text="不允许" android:textColor="#226fff" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> <View android:layout_width="1px" android:layout_height="match_parent" android:background="#cccccc" /> <TextView android:id="@+id/tv_right" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:paddingTop="10dp" android:paddingBottom="10dp" android:text="好" android:textColor="#226fff" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> </LinearLayout></androidx.constraintlayout.widget.ConstraintLayout>
