关于自定义Dialog的那些事
来源:互联网 发布:网络打印共享器怎么用 编辑:程序博客网 时间:2024/04/20 04:47
Dialog也就是传说中的弹出框,系统自带的一些布局和功能比较简单,一般来说满足不了开发的需求,因此,需要我们自己动手,来实现一个自定义的Dialog。
首先,如果要实现一个自己的Dialog,我们需要继承自Dialog。Dialog的构造函数一共有三种格式,我们至少需要生命其中的一种形式,才能够使用。
构造函数的格式如下:
1.public MyCameraDialog(Context context,boolean cancelable,
OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
}
2.public MyCameraDialog(Context context,int theme) {
super(context, theme);
}
3.public MyCameraDialog(Context context) {
super(context);
}
在这三种构造函数,我们最常用的是第二种,也就是需要上下文对象和样式的构造函数,当我们使用这个构造函数的时候,我们需要指定一个样式,比如说是没有标题等。
当然,我们可以用第三个构造函数,只传入一个上下文对象,然后设置一个我们指定的默认的样式。就像下面这样:
public MyCameraDialog(Context context) {
this(context,R.style.MyStyle);
}
这样当我们创建窗口的时候,就可以使用我们默认的显示样式了,R.style.MyStyle这个是指在style文件中设置的一个Dialog的样式,下面是常用的设置。
<style name="CustomDialog" parent="android:style/Theme.Dialog"> <!-- 背景颜色及透明程度 --> <item name="android:windowBackground">@android:color/transparent</item> <!-- 是否有标题 --> <item name="android:windowNoTitle">true</item> <!-- 是否浮现在activity之上 --> <item name="android:windowIsFloating">true</item> <!-- 是否模糊 --> <item name="android:backgroundDimEnabled">false</item> <item name="android:windowFrame">@null</item> </style>
设置好样式之后,我们需要用我们自定义的布局,来设置显示的画面。
在Dialog里面,如果我们想使用自己的自定义布局,非常简单,我们只要重写onCreate方法即可,就像是我们在写一个Activity的布局一样,在onCreate里面,我们可以使用
setContentView(R.layout.dialog);来设置我们要填充的布局,然后对布局里面控件的事件绑定也都可以进行。
在设置好这些东西之后,我们就可以使用new MyDialog(context).show()来显示我们自定义的Dialog了。
下面是一个用来选择照片或者是拍照来获取照片的自定义Dialog的范例,大家可以参考
/** * 为符合软件整体风格而自定义的选择照片来源dialog * * @author ZhaoKaiQiang * * Time:2014年3月12日 */public class MyCameraDialog extends Dialog {private TextView tv_my_camera_take_photo;private TextView tv_my_camera_from_album;private Context mContext;private static int mTheme = R.style.MyDialog;/** * 自定义Dialog * * @param context * 上下文 * @param activity * Dialog所在的Activity,用于点击“确定”按钮后finish所在的Activity * @param title * 文本内容 * @param btnString * 按钮上的文字 * @param theme * 样式 */public MyCameraDialog(Context context, int theme) {super(context, theme);this.mContext = context;}public MyCameraDialog(Context context) {super(context, mTheme);this.mContext = context;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.dialog_select_photo);tv_my_camera_take_photo = (TextView) findViewById(R.id.tv_my_camera_take_photo);tv_my_camera_from_album = (TextView) findViewById(R.id.tv_my_camera_from_album);tv_my_camera_take_photo.setOnClickListener(new android.view.View.OnClickListener() {@Overridepublic void onClick(View v) {MyCameraDialog.this.dismiss();//拍照选择Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");((Activity) mContext).startActivityForResult(intent, 0);}});tv_my_camera_from_album.setOnClickListener(new android.view.View.OnClickListener() {@Overridepublic void onClick(View v) {//从相册选择MyCameraDialog.this.dismiss();Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);((Activity) mContext).startActivityForResult(intent, 1);}});}}
- 关于自定义Dialog的那些事
- 关于自定义Dialog那些事
- 【Android界面实现】关于自定义Dialog的那些事
- 关于自定义Dialog的问题
- 关于自定义dialog的样式
- 自定义一个Dialog你需要做那些事?
- 关于自定义Dialog(一)
- 关于自定义dialog
- 关于创建自定义控件的那些事(笔记)
- dialog全屏那些事
- 关于iOS UIAlertController自定义的那些事儿
- 关于iOS NSOperation 自定义的那些事儿
- 关于自定义dialog中textview的显示的问题
- Android中关于自定义Dialog的使用简介
- 关于自定义Dialog 中match_parent 属性 失效的问题
- 关于自定义dialog不能左右全屏的解决办法
- 自定义Dialog的方法
- 自定义自己的Dialog
- oVirt engine备份与恢复官方文档
- CentOS 6.5下OpenPortalServer部署指南
- 解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- 加密学习
- 点赞时代,你为什么被人绝交?
- 关于自定义Dialog的那些事
- Staring at a blank desktop, due to event 4006
- Windows Server 2012: Deactivating UAC
- 百度地图实现最简单的定位功能(无地图界面)
- leetcode刷题,总结,记录,备忘 80
- PostgreSQL新手入门
- Linux常用命令(自我总结)
- 图片的内存优化
- struts2总结