Android DialogFragment 的常用属性

首先,dialog在业务场景中,通常需要用到的属性:
①:弹窗的背景:通常首先设置为透明背景,其次设置背景的样式,例如带有一些圆角的白色为底.
②:弹窗在界面的显示位置,比如:居中,底部,顶部等.
③:弹窗的大小,注意:在xml中设置的大小、背景,在显示弹窗的时候通常是失效的,所以还需要在创建弹窗的时候重新设置.
④:弹窗的动画效果,即弹出和消失的方向及动画.

下面进行详细讲解:
①:设置Dialog的背景及样式,设置diallog的自身背景为透明的主题,并添加上边框为圆角的白色背景
重写onCreateDialog,并在style.xml中新建Dialog_Fullscreen风格

   @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        if (mDialog == null) {
            Logger.i(Logger._TJ, "onCreateDialog");
            mDialog = new Dialog(getActivity(), R.style.Dialog_Fullscreen);
            Window window = mDialog.getWindow();
            Drawable bg = getResources().getDrawable(R.drawable.dialog_bg);
            window.setBackgroundDrawable(bg);
        }
        return mDialog;
    }
    

dialog_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:topRightRadius="@dimen/d18" android:topLeftRadius="@dimen/d18"/>
    <solid android:color="#FFFFFFFF"/>
</shape>

styles.xml

 <style name="Dialog_Fullscreen">
        <item name="android:windowFullscreen">true</item> //设置全屏
        <item name="android:windowNoTitle">true</item> //设置无标题栏 部分机型回带有标题栏
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowBackground">@android:color/transparent</item><!--背景透明-->
    </style>

以下params 的设置:

 WindowManager.LayoutParams params = window.getAttributes();

②:设置弹窗的显示位置

			params.gravity = Gravity.BOTTOM;//设置显示在底部
		    params.y = 55;//设置底部后,可以自行在修改它的偏移量

③:设置弹窗的大小

            params.width = WindowManager.LayoutParams.MATCH_PARENT;
            params.height = WindowManager.LayoutParams.WRAP_CONTENT;//这里高度设置为wrap_content,则默认是xml中设置的大小

④:设置进入和消失的动画

            params.windowAnimations = R.style.dialogAnim;

styles.xml

    <style name="dialogAnim" mce_bogus="1" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/dialog_push_in</item>
        <item name="android:windowExitAnimation">@anim/dialog_push_out</item>
    </style>

在res文件夹下,新建文件anim,并创建dialog_push_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromYDelta="100%p"
        android:toYDelta="0%p"/>
    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="0.0"
        android:toAlpha="1.0"/>
</set>

创建dialog_push_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromYDelta="0%p"
        android:toYDelta="100%p"/>
    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="1.0"
        android:toAlpha="0.3"/>
</set>

举例:一个完整的业务场景:从底部弹出一个白色的弹窗:
Android DialogFragment 的常用属性_第1张图片

 @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        if (mDialog == null) {
            Logger.i(Logger._TJ, "onCreateDialog");
            mDialog = new Dialog(getActivity(), R.style.Dialog_No_Title);//设置主题
            mDialog.setCanceledOnTouchOutside(true);//设置点击外部,dialog消失
            Window window = mDialog.getWindow();
            WindowManager.LayoutParams params = window.getAttributes();
            params.gravity = Gravity.BOTTOM;//设置弹出位置
            Drawable bg = getResources().getDrawable(R.drawable.screensaver_dialog_bg);//生成drawable背景
            window.setBackgroundDrawable(bg);//设置dialog自身的背景
            params.dimAmount = 0.4f;//设置外部的透明度,0 -1 全透明 - 全黑,
            window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);//设置FLAG_DIM_BEHIND dimAmount才生效
            params.width = WindowManager.LayoutParams.MATCH_PARENT; //设置宽度
            params.height = WindowManager.LayoutParams.WRAP_CONTENT;//设置高度
            params.windowAnimations = R.style.dialogAnim;//设置动画
        }
        return mDialog;
    }

你可能感兴趣的:(Android,Dialog)