Android多种方式实现自定义Dialog对话框
来源:互联网 发布:uipath软件 编辑:程序博客网 时间:2024/06/07 14:42
现今的APP开发都很讲究用户体验,而系统提供的原生工具都长得比较丑,或者功能不满足我们的需求。这个时候我们想到的是自定义,而Dialog对话框也是经常需要自定义的一个工具。必须让它符合我们整体的风格!!下面就来介绍下三种自定义dialog的方法。
首先需要一个自定义的布局XML文件
自定义Dialog可以通过XML或者Java代码的方式去定义新Dialog的界面。在这里我们使用XML文件,这样会比较直观。
在下面我做了一个简单的布局来演示自定义功能。
xml文件的代码:
[XML] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
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
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
RelativeLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:layout_width
=
"300dp"
android:layout_height
=
"match_parent"
>
<
TextView
android:id
=
"@+id/textView1"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_alignParentTop
=
"true"
android:layout_centerHorizontal
=
"true"
android:text
=
"www.apkbus.com"
/>
<
TextView
android:id
=
"@+id/textView2"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_below
=
"@+id/textView1"
android:layout_centerHorizontal
=
"true"
android:layout_marginTop
=
"14dp"
android:text
=
"自定义Dialog demo"
/>
<
TextView
android:id
=
"@+id/dialog_name_textview"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_below
=
"@+id/textView2"
android:layout_centerHorizontal
=
"true"
android:text
=
"TextView"
/>
<
Button
android:id
=
"@+id/cancel_button"
android:layout_width
=
"100dp"
android:layout_height
=
"wrap_content"
android:layout_below
=
"@+id/dialog_name_textview"
android:layout_centerHorizontal
=
"true"
android:layout_marginTop
=
"16dp"
android:text
=
"关闭"
/>
</
RelativeLayout
>
一、继承Dialog类实现
这个也许是比较常用的一个方法了,通过继承Dialog类然后使用自己的布局文件来实现自定义。实现起来也是很简单的。
下面来看看代码:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
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
package
com.apkbus.apkbusdialog;
import
android.app.Dialog;
import
android.content.Context;
import
android.os.Bundle;
import
android.view.View;
import
android.widget.TextView;
public
class
MyDialog
extends
Dialog {
private
String dialogName;
public
MyDialog(Context context,String dialogName) {
super
(context);
this
.dialogName = dialogName;
}
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.my_dialog);
((TextView) findViewById(R.id.dialog_name_textview)).setText(dialogName);
findViewById(R.id.cancel_button).setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View v) {
dismiss();
}
});
}
}
说明:
1、需要实现一个非默认的构造函数,如果没有系统会提示有错。
2、需要实现一个onCreate(Bundle savedInstanceState)方法,在这里可以通过setContentView(R.layout.my_dialog);方法设置您的自定义布局,然后就是对布局控件的绑定,初始化等操作了。
3、关于Dialog自带的标题栏,如果不需要可以通过在onCreate方法中调用以下方法来去掉标题栏
[Java] 纯文本查看 复制代码
1
requestWindowFeature(Window.FEATURE_NO_TITLE);
使用:
完成了以上步骤之后,在需要调用的地方写上如下代码就可以启动我们的自定义Dialog啦。
[Java] 纯文本查看 复制代码
1
2
3
MyDialog myDialog =
new
MyDialog(
this
,
"我是继承Dialog类实现的自定义Dialog"
);
myDialog.show();
二、设置Activity属性实现
而这里是通过在AndroidManifest设置Activity的属性
[XML] 纯文本查看 复制代码
1
android:theme="@android:style/Theme.Dialog"
然后在activity就是平时的做法了。
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
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
package
com.apkbus.apkbusdialog;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.view.Window;
import
android.widget.TextView;
public
class
DialogActivity
extends
Activity{
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.my_dialog);
((TextView) findViewById(R.id.dialog_name_textview)).setText(
"我是Activity实现的自定义dialog"
);
findViewById(R.id.cancel_button).setOnClickListener(
new
OnClickListener() {
public
void
onClick(View v) {
DialogActivity.
this
.finish();
}
});
}
}
说明:
就像上面的代码一样,activity中并不需要做什么特别的操作。只是一个界面变成了Dialog的普通activity,操作跟以前一样。
只需要在AndroidManifest设置Activity的属性
[XML] 纯文本查看 复制代码
1
android:theme="@android:style/Theme.Dialog"
使用:
既然只是可以界面稍有不同的activity,那么在调用上也是跟activity的调用一样
[Java] 纯文本查看 复制代码
1
startActivity(
new
Intent(
this
, DialogActivity.
class
));
三、用PopupWindow实现
PopupWindow实现的可能跟上面的风格是不一样的,PopupWindow通过简单的设置就可以使用自定义布局。
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
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
private
void
showPopupWindow(View v){
View dialogView = LayoutInflater.from(
this
).inflate(R.layout.my_dialog,
null
);
((TextView) dialogView.findViewById(R.id.dialog_name_textview)).setText(
"我是PopupWindow实现的自定义Dialog"
);
dialogView.findViewById(R.id.cancel_button).setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
myPopupWindow.dismiss();
}
});
myPopupWindow =
new
PopupWindow(dialogView,
600
, LayoutParams.WRAP_CONTENT);
// 使其聚集
myPopupWindow.setFocusable(
true
);
// 设置允许在外点击消失
myPopupWindow.setOutsideTouchable(
true
);
//设置背景,不设置背景点击返回按钮无法关闭PopupWindow
myPopupWindow.setBackgroundDrawable(
new
ColorDrawable(Color.CYAN));
myPopupWindow.showAsDropDown(v);
}
说明:
PopupWindow的使用主要有下面几个步骤
1、使用LayoutInflater获得自定义布局的View对象
[Java] 纯文本查看 复制代码
1
View dialogView = LayoutInflater.from(
this
).inflate(R.layout.my_dialog,
null
);
2、初始化的时候设置我们的布局的View对象进去,同时设置PopupWindow的宽高。
[Java] 纯文本查看 复制代码
1
myPopupWindow =
new
PopupWindow(dialogView,
600
, LayoutParams.WRAP_CONTENT);
3、显示PopupWindow,下面的方法是显示PopupWindow在某个view的下面。
[Java] 纯文本查看 复制代码
1
myPopupWindow.showAsDropDown(v);
使用:
在需要调用的位置调用上面的方法即可。
[Java] 纯文本查看 复制代码
1
showPopupWindow(v);
三种方式的优缺点
1、Dialog的位置相对固定,而PopupWindow的位置可以随意
2、Dialog是非阻塞线程的,而PopupWindow是阻塞线程的
3、activity的方式是位置可以相对随意,并非阻塞线程
源码链接
http://www.apkbus.com/forum.php?mod=attachment&aid=MTk1NTI1fGU1ZGM0NjUxfDE0MzUyODUyNjB8MzUzOTg0fDI0MzYwMQ%3D%3D
0 0
- Android多种方式实现自定义Dialog对话框
- Android多种方式实现自定义Dialog对话框
- Android多种方式实现自定义Dialog对话框
- Android Dialog 对话框多种使用方式
- 自定义Dialog 多种显示对话框
- android的自定义dialog对话框实现
- Android中Dialog实现自定义弹出对话框
- Android实现自定义圆角对话框Dialog
- Android Dialog( 自定义对话框)
- Android自定义Dialog对话框
- Android 自定义Dialog对话框
- Android 自定义对话框Dialog
- Android自定义对话框(Dialog)
- 【android】自定义dialog对话框
- Android 自定义对话框dialog
- android 自定义对话框 Dialog
- Android自定义Dialog对话框
- android 自定义dialog用法,实现对话框内容自定义
- OpenCV-Python教程(9、使用霍夫变换检测直线)
- xml输入点击事件是如传递给java的
- 是什么时候开始发现,你在教父母东西了
- android studio 删除、导入jar包
- OpenCV-Python教程(10、直方图均衡化)
- Android多种方式实现自定义Dialog对话框
- C++建议
- 用网页服务器实现钢琴弹奏(使用Wizwiki-W7500)
- GRID汇总
- OpenCV-Python教程(11、轮廓检测)
- iReport当前页数和总页数
- 一个工程打多个jar包
- Android——摇一摇
- 信息安全的相关职位