Android 利用DialogFragment實現彈框
前言:
網上說了一堆好處,我只說自己深有體會的兩點吧
1.螢幕橫豎屏切換的時候,彈框可以儲存狀態
2.可以在popwindow中使用
使用步驟
1.建立繼承DialogFragment的dialogFragment類
public class CardDialogFragment extends DialogFragment { public static CardDialogFragment newInstance() { Bundle args = new Bundle(); CardDialogFragment fragment = new CardDialogFragment(); fragment.setArguments(args); return fragment; } @Override public void onStart() { super.onStart(); Window window = getDialog().getWindow(); WindowManager.LayoutParams params = window.getAttributes(); params.gravity = Gravity.CENTER; window.setAttributes(params); window.setBackgroundDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.circle5_white)); window.setWindowAnimations(R.style.BottomDialog_Animation); //設定邊距 DisplayMetrics dm = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm); getDialog().getWindow().setLayout((int) (dm.widthPixels * 0.72), ViewGroup.LayoutParams.WRAP_CONTENT); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_live_user_card, container, false); .... return view; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return super.onCreateDialog(savedInstanceState); } }
說明:
onStart()中的方法是設定彈框的位置和背景的,詳細看註釋。
onCreateView()自定義的dialog實現,適用於複雜的介面。
onCreateDialog()利用AlertDialog實現,適用於簡單的介面。
2.顯示
LiveUserCardDialogFragment fragment = LiveUserCardDialogFragment.newInstance(); fragment.show(getFragmentManager(),"");
3.監聽DialogFragemnt的onDismisslistener方法
- 當前Activity繼承DialogInterface.OnDismissListener
-
重寫DialogFragment中的onDismiss方法
eg:
@Override public void onDismiss(final DialogInterface dialog) { super.onDismiss(dialog); final Activity activity = getActivity(); if (activity instanceof DialogInterface.OnDismissListener) { ((DialogInterface.OnDismissListener) activity).onDismiss(dialog); } }
資料
ofollow,noindex">Android 自定義 DialogFragment 寬度問題
~~喵印