Activity作为dialog展示,如何添加自定义圆角背景

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013055213/article/details/80656397

我们有时在一个业务类里面添加一个判断逻辑,需要弹出一个dialog,有事安卓自带的dialog可能无法实现,但是我们可以进行页面跳转,把activity作为dialog弹出来.

如何将activity设置成dialog

修改activity的主题them:

android:theme=”@style/ActivityDialogStyle”
下面是主题的具体操作:

<style name="ActivityDialogStyle" parent="Theme.AppCompat.Light.Dialog">
        <!--没有标题-->
        <item name="windowNoTitle">true</item>
        <!--背景透明-->
        <item name="android:windowIsTranslucent">true</item>
        <!--是否有覆盖-->
        <item name="android:windowContentOverlay">@null</item>
        <!--是否浮动-->
        <item name="android:windowIsFloating">true</item>
        <!--边框-->
        <item name="android:windowFrame">@null</item>
        <!-- 点击空白部分activity不消失 -->
        <item name="android:windowCloseOnTouchOutside">false</item>
        <item name="android:windowFullscreen">false</item>
        <!--背景:透明-->
        <item name="android:windowBackground">@color/transparent</item>
        <!--dialog的整个屏幕的背景是否有遮障层-->
        <item name="android:backgroundDimEnabled">true</item>
        <!--弹出动画-->
        <item name="android:windowAnimationStyle">@style/AnimSlideBottom</item>
    </style>

AnimSlideBottom是activity出现和消失的动画

<style name="AnimSlideBottom" parent="Animation.AppCompat.Dialog">
        <item name="android:windowEnterAnimation">@anim/slide_bottom_in</item>
        <item name="android:windowExitAnimation">@anim/slide_bottom_out</item>
    </style>

slide_bottom_in.xml

<?xml version="1.0" encoding="utf-8"?>
<translate
    android:duration="250"
    android:fromXDelta="0"
    android:toXDelta="0"
    android:fromYDelta="100%"
    android:toYDelta="0"
    android:fillAfter="true"
    xmlns:android="http://schemas.android.com/apk/res/android">

</translate>

slide_bottom_out.xml

<?xml version="1.0" encoding="utf-8"?>
<translate
    android:duration="250"
    android:fromXDelta="0"
    android:toXDelta="0"
    android:fromYDelta="0"
    android:toYDelta="100%"
    android:fillAfter="true"
    xmlns:android="http://schemas.android.com/apk/res/android">

</translate>

设置圆角背景(一)

直接在最外层布局上设置background为圆角背景即可.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/prevention_view"
              android:layout_width="300dp"
              android:layout_height="200dp"
              android:gravity="center"
              android:paddingLeft="4dp"
              android:paddingRight="4dp"
              android:background="@drawable/prevention_corners"
              android:orientation="horizontal">

    <Button
        android:layout_margin="10dp"
        android:layout_width="100dp"
        android:layout_height="130dp"
        android:textSize="20sp"
        android:gravity="center"
        android:text="哈哈"/>


</LinearLayout>

设置圆角背景(二)

也可以在activity设置圆角背景,要在onAttachedToWindow设置,不然获取不到窗口的宽高.使用decorView,设置窗口的背景.
原理请参考实现圆角对话框样式的Activity

@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;
        //不设置宽高就是xml布局的宽高
//      lp.width = (dm.widthPixels * 4) / 5;
//      lp.height = (dm.widthPixels * 4) / 5;
        getWindowManager().updateViewLayout(view,lp);
        //下面两行代码的顺序不可以改变不然圆角背景就设置不上了
        getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
view.setBackgroundResource(R.drawable.prevention_corners);//圆角背景
    }

prevention_corners.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF" />
    <corners android:radius="30dp"/>
</shape>

我这两种方式都用了,但是圆角背景都没有展示出来,原因是我们的框架底层为页面加了一层布局,卡在中间,所以我在上层和最底层设置都无效,设置到中间布局上才有效.

猜你喜欢

转载自blog.csdn.net/u013055213/article/details/80656397