之前项目一直是使用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>