用Activity实现对话框效果

本文介绍了一种使用Activity而非Dialog来实现弹出对话框的方法。这种方法可以在没有按钮的情况下自动显示对话框,并在用户点击空白区域后保持对话框的可见性。文章详细介绍了如何通过设置主题和使用Timer类来实现这一效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家在做弹出对话框效果的时候最容易想到的是用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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值