在安卓开发中,时常遇到要弹窗提醒的情况。而系统自带的弹出对话框由不是很美观,可以通过自己继承对话框类(Dialog),并设置自定义的布局文件,来达到美化弹出式对话框的目的。
首先是自定义一个对话框类,继承自Dialog,然后再构造函数中传入对话框显示内容、按钮响应函数等参数:
代码如下 | 复制代码 |
public UserDefinedDialog(Context context, String message, View.OnClickListener onclicklistener, View.OnClickListener cancelListener) { super(context,R.style.Theme_Dialog); this.ctx = context; this.msg = message; if (onclicklistener != null) { this.okListener=onclicklistener; } if(cancelListener != null) { IsTwoButton=true; this.cancelListener=cancelListener; } } |
然后,在自定义对话框类的OnCreate函数中,设置对话框的布局,以及显示风格:
代码如下 | 复制代码 |
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.alertdialog); tvtitle = (TextView) findViewById(R.id.dialogtitle); tvcontent = (TextView) findViewById(R.id.dialogcontent); btnleft = (Button) findViewById(R.id.btnleft); btnright = (Button) findViewById(R.id.btnright); btnleft.setOnClickListener(this); btnright.setOnClickListener(this); btncenter = (Button) findViewById(R.id.btncenter); btncenter.setOnClickListener(this); if(IsTwoButton) { btnleft.setVisibility(View.VISIBLE); btnright.setVisibility(View.VISIBLE); btncenter.setVisibility(View.GONE); } tvtitle.setText("提示"); tvcontent.setText(msg); WindowManager m; m = (WindowManager)ctx.getSystemService(Context.WINDOW_SERVICE); Display d = m.getDefaultDisplay(); LayoutParams p = getWindow().getAttributes(); //设置对话框宽高 p.height = (int) (d.getHeight() * 0.3); p.width = (int) (d.getWidth() * 0.9); //设置对话框透明度 p.alpha = 0.8f; //让背景变黑 p.dimAmount = 0.7f; getWindow().setAttributes(p); getWindow().setGravity(Gravity.CENTER); } |
另外,自定义的对话框类UserDefinedDialog同时实现了OnClickListener接口,用于实现对点击对话框上按钮的响应,在响应函数中,会判断在构造该类的时候是否传入了相应的响应函数,并交由该函数处理:
代码如下 | 复制代码 |
public void onClick(View v) { switch (v.getId()) { case R.id.btnleft: if(cancelListener != null){ cancelListener.onClick(v); } break; case R.id.btncenter: if(okListener != null){ okListener.onClick(v); } break; case R.id.btnright: if(okListener != null){ okListener.onClick(v); } break; } this.cancel(); } |
最后,调用的时候非常简单:
代码如下 | 复制代码 |
new UserDefinedDialog(this, "我是一个按钮的对话框,默认效果取消", null, null).show(); new UserDefinedDialog(this, "我是两个按钮的对话框", new OnClickListener() { public void onClick(View v) { //dosomething } }, new OnClickListener() { public void onClick(View v) { //dosomething} }).show(); |
美化之后的对话框如下图所示:
自定义对话框-单个按钮
时间: 2024-11-05 21:50:41