DialogFragment开发那点事

自定义DialogFragment的大小

        final Window window = getDialog().getWindow();
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        //android.R.id.content这里一定要指定系统的
        view = inflater.inflate(ResourceUtil.getLayoutId(getActivity(), "login_main"), ((ViewGroup) window.findViewById(android.R.id.content)),false);
        window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));//注意此处
        window.setLayout(-1, -2);//自定义dialogframent的宽高
屏蔽点击对话框以外的屏幕和返回键 dialogframent消失
 /**
     * 屏蔽点击对话框以外的屏幕和返回键  dialogframent消失
     * */
    public static void shield_back_screen(DialogFragment dialogFragment){
        dialogFragment.getDialog().setCanceledOnTouchOutside(false);
        dialogFragment.getDialog().setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialogInterface, int i, KeyEvent keyEvent) {
                if (i == KeyEvent.KEYCODE_BACK) {
                    /**
                     * 屏蔽返回键
                     * */
                    return true;
                }
                return false;
            }
        });
    }
在DialogFragment的onstart里面设置,可以将对话框外部的背景设为透明
  @Override
    public void onStart() {
        super.onStart();
        Window window = getDialog().getWindow();
        WindowManager.LayoutParams windowParams = window.getAttributes();
        windowParams.dimAmount = 0.0f;//对话框以外的背景设置
        //windowParams.gravity = Gravity.TOP;//设置dialogfragment的显示位置
        window.setAttributes(windowParams);

    }
设置dialogfragment的显示位置(也是在onstart函数里设置)
windowParams.gravity = Gravity.TOP;
在onstart里设置dialogfragment本身的背景
 window.alpha = 1.0f;//0.0f-1.0f  是对话框的背景透明度
在D()ialogFragment的onCreateView里面设置,可以将对话框内部的背景设为透明
getDialog().getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));  

dialog进入和退出动画

//bottom_out
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromYDelta="0"
    android:toYDelta="100%"
    android:duration="@android:integer/config_shortAnimTime"
    android:interpolator="@android:interpolator/accelerate_quint"
    />


  //  top_in
    <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate
        android:duration="10"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="-3"
        />
    <translate
        android:fromYDelta="-150%"
        android:toYDelta="0"
        android:duration="@android:integer/config_shortAnimTime"
        android:interpolator="@android:interpolator/decelerate_quint"
        />
    <rotate
        android:startOffset="150"
        android:duration="10"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="0"
        />
</set>

//  styles
<style name="updateDialog" mce_bogus="1" parent="android:Animation">
        <item name="android:windowEnterAnimation">@anim/push_top_in</item>
        <item name="android:windowExitAnimation">@anim/push_bottom_out</item>
    </style>

    //使用:在onCreatview中
    getDialog().getWindow().getAttributes().windowAnimations = R.style.updateDialog;

或者:底部进入和底部退出

//push_in
<?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>

//push_out
<?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>

//styles
 <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>

    //使用  同上

看下效果图:
这里写图片描述

关于dialog还有很多可扩展的功能,需要自己各位去琢磨了!(例如做一些进入动画)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值