android DialogFragment简单使用

之前项目一直是使用Dialog,觉得没什么不好,但是看别人写的弹窗大多是使用DialogFragment,而且如果涉及到网络请求的话,用DialogFragment就好很多。

毕竟DialogFragment是extends Fragment的,可以在fragment的生命周期中做其他处理。

先看一个正常的弹窗。



@Override public void onActivityCreated(Bundle savedInstanceState) {
		Window window = getDialog().getWindow();
		window.getDecorView().setPadding(0, 0, 0, 0);

		WindowManager.LayoutParams attributes = window.getAttributes();
		attributes.width = (int) (ActivityUtil.getScreenWidth(getContext()) * 0.85);
		attributes.height = WindowManager.LayoutParams.WRAP_CONTENT;
		attributes.dimAmount = 0.8f;
		attributes.gravity = Gravity.CENTER;
		window.setAttributes(attributes);
		super.onActivityCreated(savedInstanceState);
	}

	@NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) {
		Dialog dialog = new Dialog(getActivity(), R.style.style_dialog);
		dialog.setCanceledOnTouchOutside(true);
		return dialog;
	}

在onActivityCreated的方法中,设置decorView的padding值,如果你的弹窗出现明明设置的MARCH_PARENT但是还是有边框值,就需要设置decorView的padding值。

然后则是设置window的LayoutParams的属性,其中有一个比较陌生的是dimAmount,这个其实就是没有内容区域的透明度。

在onCreateDialog方法中创建一个Dialog并且为它制定style。

<style name="style_dialog">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowFrame">@android:color/transparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:indeterminateOnly">true</item>
        <item name="android:windowIsFloating">true</item>
    </style>

布局文件如下

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/dimen_50"
        android:background="@drawable/bg_dialog_white"
        android:clipChildren="true"
        android:orientation="vertical"
        android:paddingLeft="@dimen/dimen_20"
        android:paddingRight="@dimen/dimen_20">

        <TextView
            android:id="@+id/id_tv_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/dimen_20"
            android:lineSpacingExtra="@dimen/dimen_3"
            android:paddingBottom="@dimen/dimen_10"
            android:paddingLeft="@dimen/dimen_15"
            android:paddingRight="@dimen/dimen_15"
            android:paddingTop="@dimen/dimen_10"
            android:text="@string/string_raider_task_explain"
            android:textColor="@color/color_333333"
            android:textSize="@dimen/dimen_14" />

        <TextView
            android:id="@+id/id_tv_confirm"
            android:layout_width="@dimen/dimen_180"
            android:layout_height="@dimen/dimen_45"
            android:layout_below="@id/id_tv_content"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="@dimen/dimen_30"
            android:layout_marginTop="@dimen/dimen_30"
            android:background="@drawable/shape_bg_login"
            android:gravity="center"
            android:padding="@dimen/dimen_10"
            android:text="@string/string_confirm"
            android:textColor="@color/color_ffffff"
            android:textSize="@dimen/dimen_14" />

    </RelativeLayout>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="@dimen/dimen_80"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center_horizontal"
        android:src="@mipmap/img_promote_dynamic" />

</FrameLayout>

猜你喜欢

转载自blog.csdn.net/u010648159/article/details/80054726
今日推荐