赞
踩
大家在做弹出对话框效果的时候最容易想到的是用Dialog显示
弹出对话框的实现效果有两种
网上各种各样实现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);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。