用Activity实现对话框效果

大家在做弹出对话框效果的时候最容易想到的是用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);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下步骤在Android实现毛玻璃效果对话框: 1. 首先,在你的项目添加依赖项,以使用GlassActionBar库。在app级别的build.gradle文件添加以下代码: ```groovy implementation 'com.github.glomadrian:GlassActionBar:0.5@aar' ``` 2. 在你的布局文件,使用`FrameLayout`作为根布局,并将`GlassFrameLayout`作为子布局。例如: ```xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.github.glaucous.androidframework.ui.widget.GlassFrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 在这里添加对话框的内容 --> </com.github.glaucous.androidframework.ui.widget.GlassFrameLayout> </FrameLayout> ``` 3. 接下来,在你的Activity设置透明状态栏和将ActionBar隐藏。例如: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 设置透明状态栏 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } // 隐藏ActionBar if (getSupportActionBar() != null) { getSupportActionBar().hide(); } setContentView(R.layout.activity_main); } ``` 4. 最后,在Activity的`onCreateOptionsMenu()`方法,将对话框的背景设置为毛玻璃效果。例如: ```java @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); // 获取对话框的背景视图 View glassView = findViewById(R.id.glass_view); // 设置毛玻璃效果 GlassActionBarHelper.makeTransparentActionBar(this, glassView, R.drawable.your_dialog_background); return true; } ``` 这样,你就可以在Android实现毛玻璃效果对话框了。记得替换代码的布局文件和背景资源为你自己的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值