Android 自定义弹出对话框界面详解

在安卓开发中,时常遇到要弹窗提醒的情况。而系统自带的弹出对话框由不是很美观,可以通过自己继承对话框类(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

Android 自定义弹出对话框界面详解的相关文章

Android编程实现AlertDialog自定义弹出对话框的方法示例

本文实例讲述了Android编程实现AlertDialog自定义弹出对话框的方法.分享给大家供大家参考,具体如下: 弹出对话框,显示自定义的布局文件 弹出对话框提示设置密码或登录密码 private void showSetPasswordDialod(){ View dialogView=mInflater.inflate(R.layout.protect_first_dialog, null); AlertDialog.Builder builder=new AlertDialog.Buil

五种形式的网页弹出窗口代码详解

弹出窗口|网页|详解 1.弹启一个全屏窗口 <html> <body http://www.webjx.com','example01','fullscreen'/">http://www.webjx.com','example01','fullscreen');"> <b>www.webjx.com</b> </body> </html> 运行代码复制代码另存代码 --您可以运行代码察看特效,您也可以复制或

Android 自定义弹出框实现代码_Android

废话不多说了,直接给大家上关键代码了. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self showAlertView:@"11111"]; } //自定义弹出框 -(void)showAlertView:(NSString *)strTipText { UIView *showView=[[UIView alloc]init]; [sho

Android 自定义弹出框实现代码

废话不多说了,直接给大家上关键代码了. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self showAlertView:@"11111"]; } //自定义弹出框 -(void)showAlertView:(NSString *)strTipText { UIView *showView=[[UIView alloc]init]; [sho

Android 自定义返回按钮的实例详解

Android 自定义返回按钮的实例详解 程序中我们有时候想让放回按钮按照自己的需求调整页面而不是单纯的按照系统返回上一级,这个问题很简单,重写 onKeyDown 方法即可. 下面方法,包含了 webview 中的返回上一页和普通 activity 的单击设置和双击退出程序. @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //如果我们用的是webview页面,想返回网页的上一页设置这里就可以了 if (key

Android自定义弹出窗口PopupWindow使用技巧_Android

PopupWindow是Android上自定义弹出窗口,使用起来很方便. PopupWindow的构造函数为 复制代码 代码如下: public PopupWindow(View contentView, int width, int height, boolean focusable) contentView为要显示的view,width和height为宽和高,值为像素值,也可以是MATCHT_PARENT和WRAP_CONTENT. focusable为是否可以获得焦点,这是一个很重要的参数

Android自定义弹出窗口PopupWindow使用技巧

PopupWindow是Android上自定义弹出窗口,使用起来很方便. PopupWindow的构造函数为 复制代码 代码如下:public PopupWindow(View contentView, int width, int height, boolean focusable) contentView为要显示的view,width和height为宽和高,值为像素值,也可以是MATCHT_PARENT和WRAP_CONTENT. focusable为是否可以获得焦点,这是一个很重要的参数,

Android自定义日历控件实例详解_Android

为什么要自定义控件 有时,原生控件不能满足我们对于外观和功能的需求,这时候可以自定义控件来定制外观或功能:有时,原生控件可以通过复杂的编码实现想要的功能,这时候可以自定义控件来提高代码的可复用性. 如何自定义控件 下面我通过我在github上开源的Android-CalendarView项目为例,来介绍一下自定义控件的方法.该项目中自定义的控件类名是CalendarView.这个自定义控件覆盖了一些自定义控件时常需要重写的一些方法. 构造函数 为了支持本控件既能使用xml布局文件声明,也可在ja

js showModalDialog弹出窗口实例详解_javascript技巧

showModalDialog:模式窗口, 一种很特别的窗口,当它打开时,后面的父窗口的活动会停止,除非当前的模式子窗口关闭了, 才能操作父窗口.在做网页Ajax开发时,我们应该有时会用到它来实现表单的填写, 或做类似网上答题的窗口. 它的特点是,传参很方便也很强大,可直接调用父窗口的变量和方法. 使用方法:  vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures])  参数说明:  sURL--  必选参数,