如何使用你自己的弹窗 - ZWeijian/FormView GitHub Wiki

如何使用你自己的弹窗

  1. 设置菜单监听器setOnMenuListener
  2. 在对应的回调函数使用你自己的弹窗,最后返回false,表示不使用默认弹窗

比如我想使用自己的列弹窗,那么我应该在onColumnMenu函数中使用自己的弹窗,然后返回false。

             * 用户点击列按钮,需要打开列菜单
             * 建议打开弹窗前,选中目标列 mFormView.selectColumn(rowPos, columnPos, true);
             * 关闭弹窗后,取消选中目标列 mFormView.selectColumn(rowPos, columnPos, false);
             *
             * @param box              目标单元格的数据
             * @param rowPos           目标单元格的行号
             * @param columnPos        目标单元格的列号
             * @param totalColumnNum   可见列数
             * @param menu             推荐的菜单选项
             * @return true:使用自带的默认弹窗   false:使用你自己的弹窗
             */
            @Override
            public boolean onColumnMenu(Box box, final int rowPos, final int columnPos, final int totalColumnNum, String[] menu) {
                //推荐打开弹窗前,选中目标列
                mFormView.selectColumn(rowPos, columnPos, true);
                //创建并打开你自己的弹窗MenuDialog 
                MenuDialog menuDialog = new MenuDialog(FormActivity.this, menu, new MenuDialog.OnMenuListener() {
                    @Override
                    public void onSelect(String text, int pos) {
                        //推荐关闭弹窗后,取消选中目标列
                        mFormView.selectColumn(rowPos, columnPos, false);

                        switch (text) {
                            case "增加一列":
                                mFormView.addColumn(columnPos + 1, 1);
                                break;
                            case "删除此列":
                                mFormView.deleteColumn(rowPos, columnPos);
                                break;
                            case "最右增加一列":
                                mFormView.addColumn(totalColumnNum, 1);
                                break;
                            case "最右减少一列":
                                mFormView.deleteColumnAtTheEnd(1);
                                break;
                            default:
                        }
                    }

                    @Override
                    public void onCancel() {
                        //推荐关闭弹窗后,取消选中目标列
                        mFormView.selectColumn(rowPos, columnPos, false);
                    }
                });
                menuDialog.show();

                //return true 使用自带的默认弹窗
                //return false 使用你自己的弹窗
                return true;
            }

完整的例子

        mFormView.setOnMenuListener(new OnMenuListener() {

            /**
             * 用户长按单元格,需要打开单元格菜单
             *
             * @param box       选中单元格的数据
             * @param rowPos    选中单元格的行号
             * @param columnPos 选中单元格的列号
             * @param menu      推荐的菜单选项
             * @return true:使用自带的默认弹窗   false:使用你自己的弹窗
             */
            @Override
            public boolean onBoxMenu(Box box, final int rowPos, final int columnPos, String[] menu) {
                //创建并打开你自己的弹窗
                MenuDialog menuDialog = new MenuDialog(FormActivity.this, menu, new MenuDialog.OnMenuListener() {
                    @Override
                    public void onSelect(String text, int pos) {
                        switch (text) {
                            case "调整宽度权重":
                                mFormView.setBoxWeight(rowPos, columnPos, 3);
                                break;
                            case "合并右单元格":
                                mFormView.mergeRightBox(rowPos, columnPos, true);
                                break;
                            case "拆分单元格":
                                mFormView.splitBox(  rowPos, columnPos);
                                break;
                            case "文字加粗":
                                mFormView.setBoxBold(rowPos, columnPos, true);
                                break;
                            case "取消加粗":
                                mFormView.setBoxBold(rowPos, columnPos, false);
                                break;
                            default:
                        }
                    }

                    @Override
                    public void onCancel() {

                    }
                });
                menuDialog.show();

                //return true 使用自带的默认弹窗
                //return false 使用你自己的弹窗
                return true;
            }


            /**
             * 用户点击列按钮,需要打开列菜单
             * 建议打开弹窗前,选中目标列 mFormView.selectColumn(rowPos, columnPos, true);
             * 关闭弹窗后,取消选中目标列 mFormView.selectColumn(rowPos, columnPos, false);
             *
             * @param box              目标单元格的数据
             * @param rowPos           目标单元格的行号
             * @param columnPos        目标单元格的列号
             * @param totalColumnNum   可见列数
             * @param menu             推荐的菜单选项
             * @return true:使用自带的默认弹窗   false:使用你自己的弹窗
             */
            @Override
            public boolean onColumnMenu(Box box, final int rowPos, final int columnPos, final int totalColumnNum, String[] menu) {
                //打开弹窗前,选中目标列
                mFormView.selectColumn(rowPos, columnPos, true);
                //创建并打开你自己的弹窗
                MenuDialog menuDialog = new MenuDialog(FormActivity.this, menu, new MenuDialog.OnMenuListener() {
                    @Override
                    public void onSelect(String text, int pos) {
                        //关闭弹窗后,取消选中目标列
                        mFormView.selectColumn(rowPos, columnPos, false);

                        switch (text) {
                            case "增加一列":
                                mFormView.addColumn(columnPos + 1, 1);
                                break;
                            case "删除此列":
                                mFormView.deleteColumn(rowPos, columnPos);
                                break;
                            case "最右增加一列":
                                mFormView.addColumn(totalColumnNum, 1);
                                break;
                            case "最右减少一列":
                                mFormView.deleteColumnAtTheEnd(1);
                                break;
                            default:
                        }
                    }

                    @Override
                    public void onCancel() {
                        //关闭弹窗后,取消选中目标列
                        mFormView.selectColumn(rowPos, columnPos, false);
                    }
                });
                menuDialog.show();

                //return true 使用自带的默认弹窗
                //return false 使用你自己的弹窗
                return true;
            }

            /**
             * 用户点击行按钮,需要打开行菜单
             * 建议打开弹窗前,选中目标行 mFormView.selectRow(rowPos, true);
             * 关闭弹窗后,取消选中目标行 mFormView.selectRow(rowPos, false);
             *
             * @param box           目标单元格的数据
             * @param rowPos        目标单元格的行号
             * @param columnPos     目标单元格的列号
             * @param totalRowNum   总行数
             * @param menu          推荐的菜单选项
             * @return true:使用自带的默认弹窗   false:使用你自己的弹窗
             */
            @Override
            public boolean onRowMenu(Box box, final int rowPos, int columnPos, int totalRowNum, String[] menu) {
                //打开弹窗前,选中目标行
                mFormView.selectRow(rowPos, true);
                //创建并打开你自己的弹窗
                MenuDialog menuDialog = new MenuDialog(FormActivity.this, menu, new MenuDialog.OnMenuListener() {
                    @Override
                    public void onSelect(String text, int pos) {
                        //关闭弹窗后,取消选中目标行
                        mFormView.selectRow(rowPos, false);
                        switch (text) {
                            case "增加一行":
                                mFormView.addRow(rowPos + 1);
                                break;
                            case "最下增加一行":
                                mFormView.addRowAtTheEnd();
                                break;
                            case "删除此行":
                                mFormView.deleteRow(rowPos);
                                break;
                            case "平分此行":
                                mFormView.equalRow(rowPos);
                                break;
                            case "重置此行":
                                mFormView.resetRow(rowPos);
                                break;
                            default:
                        }
                    }

                    @Override
                    public void onCancel() {
                        //关闭弹窗后,取消选中目标行
                        mFormView.selectRow(rowPos, false);
                    }
                });
                menuDialog.show();

                //return true 使用自带的默认弹窗
                //return false 使用你自己的弹窗
                return true;
            }
        });