600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > android 自定义dialog 定时关闭 Android 对话框定时自动关闭的实现

android 自定义dialog 定时关闭 Android 对话框定时自动关闭的实现

时间:2023-06-27 16:08:29

相关推荐

android 自定义dialog 定时关闭 Android 对话框定时自动关闭的实现

初学Android没几天,最近在做一个项目,需要实现对话框弹出一段时间后自动消失,网上查找了部分资源并参考了SDK后,整理了下相关的方法:

实现对话框的弹出消隐,现实主要的方法是使用Toast。Toast一般的使用很简单,一行代码即可:

Toast.makeText(getApplicationContext(), "默认Toast样式", Toast.LENGTH_SHORT).show();

当然,Toast使用不限于此,强大的武器就是这样,菜鸟可以简单上手,高手也可以玩出花样。另如有兴趣深入下,可参考:/cmdn/wiki/index.php?doc-view-4610.html

下面是我们今天主要提到的方法:

Toast虽然使用很简单,但是它还是有很多的限制的,比如它是没有焦点的,因此即使是自定义的Toast也无法对上面的组件进行操作。例如我们需要一个输入用户信息的对话框,但如一段时间没有信息输入之后则自动关闭,这个就需要使用自定义的对话框了。但自定义的对话框是没有自动消隐的属性的,因此就需要我们有个线程对其进行监控,必要的时候对其进行关闭。

下面,我们使用一般的对话框AlertDialog来举例:

1、首先,在类(SampleView)内定义一个对话框,而后在需要弹出对话框的时候,进行赋值:

private AlertDialog alertDialog = null;//私有的对话框

2、声明并定义一个计时器,并在定时器内定义标志位,用于对传递消息进行判断:

private final int CLOSE_ALERTDIALOG = 0; //定义关闭对话框的动作信号标志 private final int CLOSE_SAMPLE_VIEW = 0; //定义关闭SampleView的动作信号标志 private DelayCloseController delayCloseController = new DelayCloseController(); private class DelayCloseController extends TimerTask { private Timer timer = new Timer(); private int actionFlags = 0;//标志位参数 public void setCloseFlags(int flag) { actionFlags = flag; } @Override public void run() { Message messageFinish = new Message(); messageFinish.what = actionFlags ; mHandler.sendMessage(messageFinish); } }

3、声明并定义一个Handler,用于接收定时器发送的信息,并对信息作出反馈。

private Handler mainHandler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case CLOSE_SAMPLE_VIEWER: if(alertDialog != null && alertDialog.isShowing()) { alertDialog.dismiss(); } SampleView.this.finish(); break; case CLOSE_ALERTDIALOG: if(alertDialog != null alertDialog.isShowing()) { alertDialog.dismiss(); //关闭对话框 } break; default: break; } } };

4、上述动作,已经完成了我们需要为程序做的准备工作,接下来,只需在需要弹出对话框的位置添加对话框定义并显示的代码,以及发送相关的消息即可:

//初始化对话框并显示 alertDialog = new AlertDialog.Builder(Main.this) .setTitle("自动关闭对话框") .setMessage("对话框将在8s之后关闭") .show(); delayCloseController.setCloseFlags(CLOSE_ALERTDIALOG); //设置信息标志位 delayCloseController.timer.schedule(delayCloseController, 8000); //启动定时器

依照以上的方法即可实现对话框的定时关闭的功能了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。