本篇博文来分享一个也是开发中经常需要用到的功能-自定义对话框,这里我用到了Android中的图形资源shape,具体使用方法,各位看代码吧,Android有多钟图形资源,后面小巫也会总结分享出来,方便各位使用。
我们来看看自定义Dialog的具体步骤吧:
1.修改系统默认的Dialog样式(风格、主题)
2.自定义Dialog布局文件
3.可以自己封装一个类,继承自Dialog或者直接使用Dialog类来实现,为了方便以后重复使用,建议自己封装一个Dialog类
源码下载:javascript:void(0)
有兴趣的朋友可以加本人创建的群,里面有丰富的学习资源哦:299402133(移动开发狂热者群)
效果图:
具体实现代码如下:
1. 修改样式
/04_CustomDialog/res/values/styles.xml
添加以下代码:
[html] view plain copy
1. <!-- 对话框主题 -->
2. <style name="DialogTheme" parent="@android:style/Theme.Dialog">
3. <item name="android:windowBackground">@android:color/transparent</item>
4. <item name="android:windowNoTitle">true</item>
5. </style>
2. 自定义Dialog
[java] view plain copy
1. package com.wwj.custom.dialog;
2.
3. import android.app.Dialog;
4. import android.content.Context;
5. import android.content.res.Resources;
6. import android.util.DisplayMetrics;
7. import android.view.Gravity;
8. import android.view.Window;
9. import android.view.WindowManager;
10.
11. /**
12. * 自定义对话框
13. *
14. * @author wwj
15. *
16. */
17. public class CustomDialog extends Dialog {
18. private static int default_width = 160; // 默认宽度
19. private static int default_height = 120;// 默认高度
20.
21. public CustomDialog(Context context) {
22. super(context);
23. }
24.
25. public CustomDialog(Context context, int layout, int style) {
26. this(context, default_width, default_height, layout, style);
27. }
28.
29. public CustomDialog(Context context, int width, int height, int layout,
30. int style) {
31. super(context, style);
32. // 设置内容
33. setContentView(layout);
34. // 设置窗口属性
35. Window window = getWindow();
36. WindowManager.LayoutParams params = window.getAttributes();
37. // 设置宽度、高度、密度、对齐方式
38. float density = getDensity(context);
39. int) (width * density);
40. int) (height * density);
41. params.gravity = Gravity.CENTER;
42. window.setAttributes(params);
43.
44. }
45.
46. /**
47. * 获取显示密度
48. *
49. * @param context
50. * @return
51. */
52. public float getDensity(Context context) {
53. Resources res = context.getResources();
54. DisplayMetrics dm = res.getDisplayMetrics();
55. return dm.density;
56. }
57. }
3. 自定义布局
/04_CustomDialog/res/layout/dialog_layout.xml
[html] view plain copy
1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2. android:layout_width="fill_parent"
3. android:layout_height="fill_parent"
4. android:background="@drawable/dialog_bg"
5. android:gravity="center"
6. android:orientation="vertical" >
7.
8. <ProgressBar
9. style="@style/DialogTheme"
10. android:layout_width="wrap_content"
11. android:layout_height="wrap_content" />
12.
13. <TextView
14. android:id="@+id/message"
15. android:layout_width="wrap_content"
16. android:layout_height="wrap_content"
17. android:layout_marginTop="5dp"
18. android:text="正在执行..." />
19.
20. </LinearLayout>
布局文件中用到了一个图像资源:
/04_CustomDialog/res/drawable/dialog_bg.xml
[html] view plain copy
1. <?xml version="1.0" encoding="utf-8"?>
2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
3. android:shape="rectangle" >
4.
5. <corners android:radius="10dp" />
6.
7. <solid android:color="#55000000" />
8.
9. </shape>
4. 显示自定义对话框
[java] view plain copy
1. package com.wwj.custom.dialog;
2.
3. import android.app.Activity;
4. import android.os.Bundle;
5.
6. /**
7. * 1.修改系统默认的Dialog样式(风格、主题)
8. *
9. * 2.自定义Dialog布局文件
10. *
11. * 3.可以自己封装一个类,继承自Dialog或者直接使用Dialog类来实现,为了方便以后重复使用,建议自己封装一个Dialog类
12. *
13. * @author wwj
14. *
15. */
16. public class MainActivity extends Activity {
17.
18. @Override
19. protected void onCreate(Bundle savedInstanceState) {
20. super.onCreate(savedInstanceState);
21. setContentView(R.layout.activity_main);
22.
23. new CustomDialog(this,
24. R.layout.dialog_layout, R.style.DialogTheme);
25. customDialog.show();
26. }
27.
28. }