频道栏目
首页 > 资讯 > Android > 正文

用Activity实现对话框效果

17-06-09        来源:[db:作者]  
收藏   我要投稿

大家在做弹出对话框效果的时候最容易想到的是用Dialog显示

弹出对话框的实现效果有两种

Dialog Activity

网上各种各样实现Dialog的方式有很多,他们还加了很多的特技,比如动画啥的

(但是今天实现的是用Activity显示对话框的样式)

用Dialog显示一个对话框(演示效果) 点击空白处Dialog消失,必须要再次点击弹出按钮才能再次弹出对话框

这里写图片描述

Activity实现对话框的方法,可以在没有按钮的时候也弹出对话框,且如果点击了空白,对话框依旧可以显示(演示效果)

这里写图片描述

这个的动态图的意思是,我的界面没有任何弹出对话框的按钮,在程序开启两秒之后弹出一个对话框,当我点击屏幕空白的地方对话框关闭,并在两秒之后对话框再次显示

这个效果肯定是可以用Dialog实现的,但是我认为使用Activtiy会更加简单

难点:在用户点击空白后(DialogActivity被覆盖,初始Activity再次显示),过两秒钟显示对话框(在没有Button的情况下)

突破点:要监听Activity的周期,点击空白后当初始Activity重新被显示的两秒钟之后弹出对话框

实现步骤:

将一个Activity做成对话框形式 就叫DialogActivity

初始Ativity两秒之后显示DialogActivity

用户点击空白处(DialogActivity为关闭状态) 过两秒之后再次弹出对话框

将一个Activity呈Dialog显示

1.首先要将这个xml设计出来,也就是对话框显示的样子

此处省略代码……

2.设置Activty样式为Dialog

清单文件

选择要显示成Dialog的activity标签

设置 theme 属性

一般设置成Dialog样式都会带有Dialog字样

android:theme=”@android:style/Theme.DeviceDefault.Dialog.NoActionBar.MinWidth”

这样就大功告成了

显示初始Activity的两秒之后,显示DialogActivity

1.两秒的计时我是用的 Timer 类,在两秒钟之后跳转到DialogActivty界面

这个方法的使用,因为要不断显示弹出对话框,所以用while循环

while(true){

mTimer = new Timer();

mTimer.schedule(new TimerTask() {

@Override

public void run() {

//跳转到界面

Intent intent = new Intent(WelcomeActivity.this, DialogActivty.class);

startActivity(intent);

}

}, 2000);

}
这里写图片描述

这样两秒跳转的功能就完成了

用户点击空白处(DialogActivity自动关闭) 过两秒之后再次弹出对话框

那这个方法在哪里调用的呢?是在onCreate()中调用吗??

试想一下,当用户点击空白处DialogActiviy消失,继续显示到初始Activity,这个时候还会再调用初始Activity的onCreate()方法吗

答案是不会,再次显示的时候会调用onResume()方法

而一开始显示初始界面的时候也会调用onResume()方法

那这样就把显示(跳转)DialogActivity的方法放到onResume()中

@Override

protected void onResume() {

super.onResume();

showDia();

}

这样的话就实现了用Activity显示Dialog样式,并根据Activity的生命周期显示DialogActivity

小Bug调试

这样写是完成了效果但是会出现一个小小的Bug,当退出初始界面的时候,还是会两秒就弹出一个对话框

解决办法

在初始Activity关闭的时候,判断是否还需要跳转(设置变量isIntent初始为true),并关闭跳转的timer任务

@Override

protected void onStop() {

super.onStop();

//不再跳转

isIntent=false;

mTimer.cancel();

}

这样的话跳转任务也要判断一下

//判断是否还需要跳转

if (isIntent){

//跳转到界面

Intent intent = new Intent(WelcomeActivity.this, IpsetActivity.class);

startActivity(intent);

}

}

}, 2000);
相关TAG标签
上一篇:Android线程—Timer类(五)
下一篇:vuejs填坑之路(二)-如何使用webpack
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站