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

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

如何将activity设置成dialog

修改activity的主题them:

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

AnimSlideBottom是activity出现和消失的动画

slide_bottom_in.xml


<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


<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为圆角背景即可.


<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


<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF" />
    <corners android:radius="30dp"/>
shape>

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

你可能感兴趣的:(android)