Talk is Cheap.
public abstract class BaseDialog extends DialogFragment {
protected View rootView;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setDialogStyle();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// 設(shè)置圓角需要
Window window = getDialog().getWindow();
if (window != null) {
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
getDialog().setCanceledOnTouchOutside(getCanceledOnTouchOutside());
setCancelable(getCancelable());
rootView = inflater.inflate(getLayoutId(), container, false);
initView();
setListener();
return rootView;
}
@Override
public void onStart() {
super.onStart();
// 重置寬高
Window window = getDialog().getWindow();
if (window != null) {
window.setLayout(getWidth(), getHeight());
}
}
/**
* 顯示Dialog
*/
public void show(FragmentManager fragmentManager) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
Fragment pre = fragmentManager.findFragmentByTag(getFragmentTag());
if (pre != null) {
transaction.remove(pre);
}
// onSaveInstance后commit無法提交
try {
show(transaction, getFragmentTag());
} catch (IllegalStateException e) {
// 容錯(cuò)處理,不做操作
}
}
/**
* 顯示Dialog
*/
public void show(@NonNull FragmentActivity activity) {
show(activity.getSupportFragmentManager());
}
/**
* 避免莫名其妙的空指針
* onSaveInstance后commit無法提交
*/
@Override
public void dismiss() {
if (getFragmentManager() == null) {
return;
}
dismissAllowingStateLoss();
}
protected abstract int getLayoutId();
protected abstract void initView();
protected abstract void setListener();
protected abstract String getFragmentTag();
/**
* override
* 配置對(duì)話框風(fēng)格
*/
protected void setDialogStyle() {
setStyle(DialogFragment.STYLE_NO_TITLE, 0);
}
/**
* override
* 配置點(diǎn)擊對(duì)話框外部是否消失
*/
protected boolean getCanceledOnTouchOutside() {
return false;
}
/**
* override
* 配置返回鍵是否可以關(guān)閉對(duì)話框
*/
protected boolean getCancelable() {
return true;
}
/**
* override
* 配置寬度
*/
protected int getWidth() {
return ViewGroup.LayoutParams.WRAP_CONTENT;
}
/**
* override
* 配置高度
*/
protected int getHeight() {
return ViewGroup.LayoutParams.WRAP_CONTENT;
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者