Android实现dialog功能的Activity

Dialog功能的Activity

请遵守行规!
做项目时需要启动一个另一个进程,但是 这个进程的activity需要以弹窗的方式呈现,然后在activity中执行一些操作,经过查阅资料和自己研究终于实现了,这里记录下方便以后使用,欢迎补充

1.修改activity的背景透明度
在activity的them:style/AppTheme中的resource中加color属性,修改这个item中的值可以达到自己想要的透明度

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
    <!-- 设置透明度为56%(9/16)左右 -->  
    <color name="transparent">#9000</color>       
</resources>  

还可以这样:(要设置为没有actionBar)

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowBackground">@color/transparent</item>
    <!-- 设置底层可见 -->
    <item name="android:windowIsTranslucent">true</item>
</style>

2.设置activity的切换动画
设置完背景之后需要设置activity切换动画,不然就不是dialog的效果了,因为dialog是直接弹出来的,activity有个默认的切换画面,在刚才的style里加一条item属性

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowAnimationStyle">@null</item>
</style>

有时候也许会因为需求的不同要求弹出无动画,退出有动画等各种需求,这样就需要我们自己组合切换动画,然后在这条item中引用这个动画,下面是切换的几种动画

<style name="FeelyouWindowAnimTheme" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@null</item>
    <item name="android:activityOpenExitAnimation">@null</item>
    <item name="android:activityCloseEnterAnimation">@null</item>
    <item name="android:activityCloseExitAnimation">@null</item>
</style>

注意需要继承自 @android:style/Animation.Activity。具体这4个属性什么意思呢?假设我们有 2 个 Activity,分别是 A1 和 A2:

当我们从 A1 启动 A2 时,A1 从屏幕上消失,这个动画叫做 android:activityOpenExitAnimation
当我们从 A1 启动 A2 时,A2 出现在屏幕上,这个动画叫做 android:activityOpenEnterAnimation
当我们从 A2 退出回到 A1 时,A2 从屏幕上消失,这个叫做 android:activityCloseExitAnimation
当我们从 A2 退出回到 A1 时,A1 出现在屏幕上,这个叫做 android:activityCloseEnterAnimation

3.设置Activity的大小和位置
在代码中设置activity的大小和位置,以达到dialog效果

WindowManager m = getWindowManager();
Display d = m.getDefaultDisplay(); // 为获取屏幕宽、高
WindowManager.LayoutParams p = getWindow().getAttributes(); // 获取对话框当前的参值
p.height = (int) (d.getHeight() * 0.5); // 高度设置为屏幕的1.0
p.width = (int) (d.getWidth() * 0.5); // 宽度设置为屏幕的0.8
p.alpha = 1.0f; // 设置本身透明度
p.dimAmount = 0.0f; // 设置黑暗度
getWindow().setAttributes(p); // 设置生效
getWindow().setGravity(Gravity.RIGHT); // 设置靠右对齐

大小可以通过p.height和p.width随意设置,位置可以通过setGravity设置为屏幕的左上右下中其中的某一个位置

这样虽然看起来像是一个dialog,但是实际使用中并不是太好用,有各种小问题,所以我在用时投机取巧了一下,我把这个需要实现dialog效果的activity设置为全屏且无actionBar,然后将背景设置为透明,然后在这个activity中定义一个view,这样的话这个view想要什么样子就可以是什么样子,而且位置、大小等可以随意定义,把你需要展示和操作的放到这个view中,最后给这个activity的根布局设置一个点击事件,让点击之后执行最小化或者退出

 TestMainActivity.this.moveTaskToBack(true);//最小化
 TestMainActivity.this.finish();//退出

这样就可以达到dialog的效果了,而且比dialog还灵活(个人见解);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值