今天接到一个需求,要求快速创建自定义Dialog,且可以反复利用
代码很简单就两类,大家直接看demo吧,哈哈,我很懒得
package com.kekegdsz.www.dialoghelper.base;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.FragmentManager;
import android.content.DialogInterface;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.kekegdsz.www.dialoghelper.R;
/**
* @version V1.0
* @createAuthor (keke)
* @createDate 2017/5/12 0012
* @updateAuthor
* @updateDate
* @company 跨越速运
* @description 创建dialog工厂
* @copyright copyright(c)2016 Shenzhen Kye Technology Co., Ltd. Inc. All rights reserved.
*/
public abstract class BaseDialog extends DialogFragment {
/**
* tag
*/
private static final String TAG = "BaseDialog";
/**
* FragmentManager
*/
public FragmentManager mFragmentManager;
/**
* dialog操作监听回调
*/
private DialogViewListener mDialogViewListener;
/**
* 是否点击其他区域关闭 默认关闭
*/
private boolean mOutsideCancel = true;
/**
* 返回键是否能撤销dialog
*/
private boolean mBackCancel = true;
/**
* tag标记
*/
private String mTag = "BaseDialog";
/**
* 布局文件
*/
public int mLayoutRes;
public interface DialogViewListener {
void bindView(View v);
void dismiss();
}
public BaseDialog() {
}
public BaseDialog setLayoutRes(@LayoutRes int layoutRes) {
mLayoutRes = layoutRes;
return this;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_FRAME, R.style.Theme_dialogLayout);
setRetainInstance(true);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT <= 10) {
return super.onCreateDialog(savedInstanceState);
}
LayoutInflater inflater = getActivity().getLayoutInflater();
View body = inflater.inflate(getLayoutRes(), null, false);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(body);
Dialog dialog = builder.create();
dialog.setCanceledOnTouchOutside(mOutsideCancel);
setCancelable(mBackCancel);
bindView(body);
return dialog;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup view, Bundle bundle) {
if (Build.VERSION.SDK_INT > 10) {
return super.onCreateView(inflater, view, bundle);
}
View body = inflater.inflate(getLayoutRes(), null, false);
bindView(body);
return body;
}
public void bindView(View v) {
if (mDialogViewListener != null) {
mDialogViewListener.bindView(v);
}
}
/**
* show显示dialog
*
* @param fragmentManager
*/
public void show(FragmentManager fragmentManager) {
show(fragmentManager, TAG);
}
public BaseDialog show() {
show(mFragmentManager);
return this;
}
@LayoutRes
public int getLayoutRes() {
return mLayoutRes;
}
public BaseDialog setDialogViewListener(DialogViewListener listener) {
mDialogViewListener = listener;
return this;
}
public BaseDialog setmOutsideCancel(boolean mOutsideCancel) {
this.mOutsideCancel = mOutsideCancel;
return this;
}
public BaseDialog setmBackCancel(boolean mBackCancel) {
this.mBackCancel = mBackCancel;
return this;
}
public BaseDialog setmTag(String mTag) {
this.mTag = mTag;
return this;
}
public BaseDialog setFragmentManager(FragmentManager manager) {
mFragmentManager = manager;
return this;
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
if (mDialogViewListener != null) {
mDialogViewListener.dismiss();
}
}
}
package com.kekegdsz.www.dialoghelper.base;
import android.app.FragmentManager;
/**
* @version V1.0
* @createAuthor (keke)
* @createDate 2017/5/12 0012
* @updateAuthor
* @updateDate
* @company 跨越速运
* @description dialog基类
* @copyright copyright(c)2016 Shenzhen Kye Technology Co., Ltd. Inc. All rights reserved.
*/
public class FactoryDialog extends BaseDialog {
public static FactoryDialog create(FragmentManager mFragmentManager) {
FactoryDialog demoDialog = new FactoryDialog();
demoDialog.setFragmentManager(mFragmentManager);
return demoDialog;
}
}
使用方法
package com.kekegdsz.www.dialoghelper;
import android.app.Activity;;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import com.kekegdsz.www.dialoghelper.base.BaseDialog;
import com.kekegdsz.www.dialoghelper.base.FactoryDialog;
public class MainActivity extends Activity {
private BaseDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.showdialog).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog = FactoryDialog.create(getFragmentManager())
.setLayoutRes(R.layout.layout_custom)
.setDialogViewListener(new BaseDialog.DialogViewListener() {
@Override
public void bindView(View v) {
v.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "button1", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
v.findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "button2", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
v.findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "button3", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
}
@Override
public void dismiss() {
}
})
.setmOutsideCancel(true)
.setmBackCancel(true)
.setmTag("dialog")
.show();
}
});
}
}