一键式生成自定义Dialog
来源:互联网 发布:马刺 湖人 知乎 编辑:程序博客网 时间:2024/05/06 00:13
这是我第一次写博客,水平有限,希望和大家互相分享和学习。
最近在公司做项目碰到Dialog的问题,因为是做的安卓系统的二次开发,一开始用得都是原生的Dialog,后期又要改UI,一个一个改的话很麻烦,牵扯的代码太多,于是我封装了一个Dialog,方便一些。
以下是具体的实现:新建一个UnifyDialog继承自Dialog, 构造函数传入Context,监听接口,自定义的布局,两个Button实例,Dialog的宽和高等参数。
创建一个监听接口UnifyDialogListener,提供一个onclick()方法,在oncreate()里初始化控件和设置宽高,UnifyDialog实现OnclickListener接口,通过回调的方式实现Dialog中按钮的点击事件.
public class UnifyDiaolog extends AlertDialog implements android.view.View.OnClickListener{private UnifyDiaologListener mDiaologListener;private Context context;private View mview;private Button button1; private Button button2; private int wid; private int hei; /** * @param context 上下文 * @param mDiaologListener 监听回调接口 * @param mview 自定义的view * @param button1 确定的button * @param button2 取消的button * @param wid dialog的宽 * @param hei dialog的高 */public UnifyDiaolog(Context context,UnifyDiaologListener mDiaologListener,View mview,Button button1,Button button2,int wid,int hei) { super(context); this.context=context; this.mDiaologListener=mDiaologListener; this.mview=mview; this.button1=button1; this.button2=button2; this.wid=wid; this.hei=hei; } /** * @author 提供一个监听接口 * */ public interface UnifyDiaologListener{ public void onClick(View v); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(mview); initview(); //初始化布局 WindowManager.LayoutParams lp = this.getWindow().getAttributes(); // 获取对话框当前的参数值 lp.width = wid; // 宽度 lp.height = hei; // 高度 this.getWindow().setAttributes(lp); } private void initview() { if(button1!=null){ button1.setOnClickListener(this); } if(button2!=null){ button2.setOnClickListener(this); } } @Override public void onClick(View v) { mDiaologListener.onClick(v);} }
比如我们要创建一个Dialog,设定大小是800x1200,先新建一个dialogview.xml布局文件
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:background="#ffffff" android:layout_height="wrap_content" > <Button android:id="@+id/no_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginTop="188dp" android:text="取消" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/no_btn" android:layout_centerHorizontal="true" android:layout_marginBottom="79dp" android:text="显示" android:textSize="40sp" /> <Button android:id="@+id/yes_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/no_btn" android:layout_alignBottom="@+id/no_btn" android:layout_marginRight="23dp" android:text="确定" /></RelativeLayout>
在要使用Dialog的地方只需要,new UnifyDiaolog(context, mDiaologListener, mview, button1, button2, wid, hei);即可生成一个Dialog,具体代码可以参照下面
public class MainActivity extends Activity { private Context context;private Button yes_btn; //确定按钮private Button no_btn; //取消按钮private View view; //自定义的布局 private Button tanchu; //弹出dialog的按钮 private UnifyDiaolog mDiaolog; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);context=this;//弹出dialogtanchu=(Button)findViewById(R.id.tanchu); //自定义的布局view=View .inflate(context, R.layout.dialogview, null); yes_btn=(Button) view.findViewById(R.id.yes_btn); no_btn=(Button) view.findViewById(R.id.no_btn); //创建dialog对象 mDiaolog=new UnifyDiaolog(context, new UnifyDiaologListener() {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.yes_btn:Toast.makeText(context, "确定", 0).show();break; case R.id.no_btn: Toast.makeText(context, "取消", 0).show(); mDiaolog.dismiss(); break; } }}, view, yes_btn, no_btn, 800, 1200);
</pre><pre name="code" class="java"> //弹出dialog tanchu.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View v) {mDiaolog.show();} }); } }
效果图如下:
就是这么简单的搞定了,只需要有一个布局就可以生成一个Dialog,不用再去写监听事件。
Demo下载地址:点击打开链接
- 一键式生成自定义Dialog
- 自定义Dialog---继承Dialog
- 自定义Dialog android Dialog
- 自定义Dialog
- 自定义Dialog
- 自定义dialog
- 自定义 Dialog
- 自定义dialog
- 自定义 dialog
- 自定义Dialog
- 自定义 Dialog
- 自定义Dialog
- 自定义dialog
- 自定义Dialog
- 自定义 Dialog
- 自定义Dialog
- 自定义Dialog
- 自定义Dialog
- Linux下如何彻底删除MySQL
- opencv配置之非配置文件版
- hdu 1074 Doing Homework 简单状压/集合DP
- css实现水平垂直居中(总结)
- 音乐播放器
- 一键式生成自定义Dialog
- Red Hat 6.5 安装VMware 12
- poj 1067 取石子游戏
- 寻找百度图片搜索接口--three
- 2016.3.11(你在干什么?)
- Android:30分钟弄明白Touch事件分发机制
- HDOJ1010 Tempter of the Bone
- 签到 2016.3.6
- NSString / NSData / char* 类型之间的转换