DialogFragment的简单使用

public class RightDialogFragmentTest extends DialogFragment{
    private static final String TAG = "RightDialogFragmentTest";
    private Window currentWindow;
    private LinearLayout view;
    private RelativeLayout nextVlogCard;
    private final boolean canceledOnTouchOutside;

    public RightDialogFragmentTest(boolean canceledOnTouchOutside) {
        this.canceledOnTouchOutside = canceledOnTouchOutside;//点击外部dismiss
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        Log.i(TAG,"onCreateDialog...");
        Dialog dialog = new Dialog(getActivity(), getTheme());
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);    // 去掉标题栏
        dialog.setCanceledOnTouchOutside(canceledOnTouchOutside);    // 点击外部是否关闭Dialog
        return dialog;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Log.i(TAG,"onCreateView...");
        view = (LinearLayout) inflater.inflate(R.layout.fragment_blank, container, true);
        getDialog().getWindow().setWindowAnimations(R.style.animate_dialog);//设置进出动画
        initView();
        initEvent();
        return view;
    }

    @SuppressLint("ClickableViewAccessibility")
    private void initEvent() {
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
    }

    public void initView() {
        nextVlogCard = view.findViewById(R.id.next_vlog_card);
        nextVlogCard.setOutlineProvider(new ViewOutlineProvider() {
            @Override
            public void getOutline(View view, Outline outline) {
                outline.setRoundRect(0,0,view.getWidth(),view.getHeight(),25);
            }
        });
        nextVlogCard.setClipToOutline(true);
    }

    @Override
    public void onStart() {
        Log.i(TAG,"onStart...");
        super.onStart();
        currentWindow = getDialog().getWindow();
        currentWindow.setBackgroundDrawableResource(R.color.touming);
        DisplayMetrics dm = new DisplayMetrics();
        getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
        WindowManager.LayoutParams attributes = currentWindow.getAttributes();
//        attributes.gravity = Gravity.RIGHT;
//        attributes.width = dm.widthPixels;
//        attributes.height = dm.heightPixels / 7 * 5;
        currentWindow.setAttributes(attributes);
    }
    @Override
    public void onCancel(@NonNull DialogInterface dialog) {
        Log.i(TAG,"onCancel...");
        super.onCancel(dialog);
    }

    @Override
    public void onDismiss(@NonNull DialogInterface dialog) {
        Log.i(TAG,"onDismiss...");
        super.onDismiss(dialog);
    }

    @Override
    public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
        Log.i(TAG,"onViewStateRestored...");
        super.onViewStateRestored(savedInstanceState);
    }

    @Override
    public void onStop() {
        Log.i(TAG,"onStop...");
        super.onStop();
    }

    @Override
    public void onDestroyView() {
        Log.i(TAG,"onDestroyView...");
        super.onDestroyView();
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        Log.i(TAG,"onActivityCreated...");
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public void onAttach(@NonNull Context context) {
        Log.i(TAG,"onAttach...");
        super.onAttach(context);
    }

    @Override
    public void onDetach() {
        Log.i(TAG,"onDetach...");
        super.onDetach();
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        Log.i(TAG,"onAttach...");
        super.onCreate(savedInstanceState);
    }

    @NonNull
    @Override
    public LayoutInflater onGetLayoutInflater(@Nullable Bundle savedInstanceState) {
        Log.i(TAG,"onAttach...");
        return super.onGetLayoutInflater(savedInstanceState);
    }

}

创建对象:

rightDialogFragmentTest = new RightDialogFragmentTest(true);
rightDialogFragmentTest.show(getSupportFragmentManager(),"tag");
<LinearLayout
        android:id="@+id/fragment"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

style:

<style name="animate_dialog">
        <item name="android:windowEnterAnimation">@anim/slide_in</item>
        <item name="android:windowExitAnimation">@anim/slide_out</item>
    </style>

 slide_in:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
    <translate
        android:duration="300"
        android:fromXDelta="100%p"
        android:fromYDelta="0%p" />
</set>

slide_out:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:duration="300"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
    <translate
        android:duration="300"
        android:fromXDelta="0%p"
        android:toXDelta="100%p" />
</set>

点击打开DialogFragment的按钮:

 点击外部:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值