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

整理activity以dialog的形式弹出

  • 前言
    • 正文
    • 结束

前言

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

正文

具体步骤:

  1. 在style文件中增加activity的样式

    

    

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




    


退出动画:scale_out.xml

  


    


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

结束

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

你可能感兴趣的:(安卓)