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的按钮:
点击外部: