整理关于activity以dialog的形式弹出

整理activity以dialog的形式弹出

前言

最近项目中遇到遇到了把之前的一个activity的以dialog的形式弹出,以减少代码的改动。参考了很多方法,最终实现此功能,记录一下。

正文

具体步骤:

  1. 在style文件中增加activity的样式
<!-- 类似对话框效果 -->
    <style name="MyDialogTopRight" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>        
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowAnimationStyle">@style/Anim_scale</item>
    </style>

    <style name="Anim_scale" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/scale_in</item>
        <item name="android:activityOpenExitAnimation">@anim/scale_out</item>
        <item name="android:activityCloseEnterAnimation">@anim/scale_in</item>
        <item name="android:activityCloseExitAnimation">@anim/scale_out</item>
    </style>

parent=“Theme.AppCompat.Light.NoActionBar”,如果需要显示的dialog没有标题,需要这样写,否则会显示标题头。
新增进入和退出的动画:
进入动画:scale_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <scale
        android:fromXScale="1.0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:toXScale="1.0"
        android:fromYScale="0.0"
        android:toYScale="1.0"
        android:duration="200"
        android:pivotX="0"
        android:pivotY="10%"
        />

</set>

退出动画:scale_out.xml

  <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <scale
        android:fromXScale="1.0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:toXScale="1.0"
        android:fromYScale="1.0"
        android:toYScale="0.0"
        android:duration="200"
        android:pivotX="0"
        android:pivotY="10%"
        />

</set>

2.只要在对应的activity的使用就可以了,使用的方式有两种
方式1:在清单文件中引入,这个方法适用于静态的改变主题

android:theme="android:theme="@style/MyDialogTopRight"/>

方式2:动态的在activity中设置
网上有很多说在onCreate()方法中设置,巴拉巴拉…,但是对于我这边是不可以,对于我有效的方案如下:
1.需要修改清单文件的主题为:注意⚠️:必须增加这个theme,否则动态修改不生效

 android:theme="@android:style/Theme.Translucent.NoTitleBar"

2.重写setTheme方法,在需要修改的主题的时候修改给你自定义的主题即可

@Override
    public void setTheme(int resid) {
        if (isChange){
            super.setTheme(R.style.MyDialogTopRight);
        }else {
            super.setTheme(resid);
        }
    }

3.如果想给弹出的对话框修改背景为圆角,需要设置

 @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        View view = getWindow().getDecorView();
        WindowManager.LayoutParams lp = (WindowManager.LayoutParams)view.getLayoutParams();
        lp.gravity = Gravity.CENTER;
        getWindowManager().updateViewLayout(view,lp);
        //下面两行代码的顺序不可以改变不然圆角背景就设置不上了
        getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        view.setBackgroundResource(R.drawable.shape_authrize_dialog);//圆角背景
    }

END

结束

总结了一下实现的步骤,记录一下,希望可以帮到他人少踩坑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值