日常开发中我们可能会需要自己定义布局的Dialog,这里就记录一下如何使用。
1.新建SignatureDialogFragment类继承与DialogFragment
2.重写onCreateDialog方法
3.新建布局文件dialog_signature

4.在onCreateDialog获取dialog_signature布局实例

    @Override    public Dialog onCreateDialog(Bundle savedInstanceState) {        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());        LayoutInflater inflater = getActivity().getLayoutInflater();        final View view = inflater.inflate(R.layout.dialog_signature, null);       // 获取具体的控件实例        mSignaturePad = view.findViewById(R.id.signature_pad);      //确定按钮        builder.setView(view).setPositiveButton("确定", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                if (callback != null) {//回掉接口                    callback.onClick(mSignaturePad.getSignatureBitmap());                }            }        });//取消按钮        builder.setView(view).setNegativeButton("取消", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialogInterface, int i) {            }        });        return builder.create();    }

5.定义回掉接口

    public interface Callback {        void onClick(Bitmap bitmap);    }    private Callback callback;

6.重写onAttach方法

@Override    public void onAttach(Context context) {        super.onAttach(context);        if (context instanceof Callback) {            callback = (Callback) context;        } else {            throw new RuntimeException(context.toString() + " must implement Callback");        }    }

7.在Android版本较低时没有onAttach(Context context)方法所以需要onAttach(Activity activity)方法替代

    @Override    public void onAttach(Activity activity) {        super.onAttach(activity);        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M){            onCurrentAttach(activity);        }    }    /**     * 重写此方法替代onAttach()高低版本不兼容     * @param context     */    protected void onCurrentAttach(Context context){        if (context instanceof Callback) {            callback = (Callback) context;        } else {            throw new RuntimeException(context.toString() + " must implement Callback");        }    }    @Override    public void onDestroy() {        super.onDestroy();        callback = null;    }

8.Dialog的显示方法:

SignatureDialogFragment viewDialogFragment = new SignatureDialogFragment(); viewDialogFragment.show(getFragmentManager());

全部代码如下:

public class SignatureDialogFragment extends DialogFragment {    public interface Callback {        void onClick(Bitmap bitmap);    }    private Callback callback;    private SignaturePad mSignaturePad;    public void show(FragmentManager fragmentManager) {        show(fragmentManager, "SignatureDialogFragment");    }    @Override    public Dialog onCreateDialog(Bundle savedInstanceState) {        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());        LayoutInflater inflater = getActivity().getLayoutInflater();        final View view = inflater.inflate(R.layout.dialog_signature, null);        mSignaturePad = view.findViewById(R.id.signature_pad);        builder.setView(view).setPositiveButton("确定", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                if (callback != null) {//                            EditText et_userName = (EditText) view.findViewById(R.id.username);//                            EditText et_password = (EditText) view.findViewById(R.id.password);                    callback.onClick(mSignaturePad.getSignatureBitmap());                }            }        });        builder.setView(view).setNegativeButton("取消", new DialogInterface.OnClickListener() {            @Override            public void onClick(DialogInterface dialogInterface, int i) {            }        });        return builder.create();    }//    @Override//    public void onStart() {//        super.onStart();//        DisplayMetrics dm = new DisplayMetrics();//        getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);//        getDialog().getWindow().setLayout(dm.widthPixels, getDialog().getWindow().getAttributes().height);//    }    @Override    public void onAttach(Activity activity) {        super.onAttach(activity);        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M){            onCurrentAttach(activity);        }    }    /**     * 重写此方法替代onAttach()高低版本不兼容     * @param context     */    protected void onCurrentAttach(Context context){        if (context instanceof Callback) {            callback = (Callback) context;        } else {            throw new RuntimeException(context.toString() + " must implement Callback");        }    }    @Override    public void onAttach(Context context) {        super.onAttach(context);        if (context instanceof Callback) {            callback = (Callback) context;        } else {            throw new RuntimeException(context.toString() + " must implement Callback");        }    }    @Override    public void onDestroy() {        super.onDestroy();        callback = null;    }}

注:SignaturePad是一个手写板控件

更多相关文章

  1. android下使用adb启动程序或者服务
  2. Android中不用Service跨Avtivity仍然可以播放音乐的一个简单方法
  3. Android: bitmap size exceeds VM budget holder
  4. Android(安卓)返回键连续点击两次退出应用
  5. Android(安卓)学习笔记之二 Netspeed
  6. Android错误解决方法之:Debug certificate expired on
  7. Android(安卓)dispatchTouchEvent
  8. Android(安卓)自定义View 标识当前选中的控件
  9. android:nextFocus 属性介绍

随机推荐

  1. Android之MotionLayout(三),用 MotionLay
  2. ToggleButton
  3. 初探Android
  4. UI组件
  5. Android(安卓)布局 LinearLayout与Relati
  6. 通过app打包修改app名称
  7. Maven Android(安卓)Plugin
  8. Android(安卓)头像上传
  9. android引用外部工程或jar包
  10. Android(安卓)原生项目集成 Flutter