利用WindowManager 创建最上层的view,可控制是否可以点击外部

/**
 * 用于分割指定继承时图斑选择
 *
 * @author zuo
 * @date 2018/9/5 10:56
 */
public class SplitDataChooseDialog {
    private Context mContext;
    private View mView;
    private ISplitDataChooseListener mDataChooseListener;
    private String mOrgTBBH;
    private String mSplitTBBH;
    private List<String> mChooseTBs = new ArrayList<>();

    public interface ISplitDataChooseListener {
        /**
         * 选择的图斑
         *
         * @param chooseTBs
         */
        void onResult(List<String> chooseTBs);

        /**
         * 原始图斑是否选中
         *
         * @param isChecked
         */
        void onCheckOrgTB(boolean isChecked);

        /**
         * 分割后的图斑是否选中
         *
         * @param isChecked
         */
        void onCheckSplitTB(boolean isChecked);
    }

    /**
     * @param orgTBBH   - 原始图斑编号
     * @param splitTBBH - 分割后的图斑编号
     * @param listener  - 完成选择继承图斑的监听事件
     */
    public SplitDataChooseDialog(IGeometryEngine hook, @NonNull String orgTBBH, @NonNull String splitTBBH,
                                 ISplitDataChooseListener listener) {
        this.mContext = hook.getContext();
        this.mView = hook.getMapView().getRootView();
        this.mOrgTBBH = orgTBBH;
        this.mSplitTBBH = splitTBBH;
        this.mDataChooseListener = listener;
    }

    public void show() {
        final View view = LayoutInflater.from(mContext).inflate(R.layout.choose_split_data, null);
        final CheckBox cbDataOrg = view.findViewById(R.id.cb_data_org);
        cbDataOrg.setText(mOrgTBBH);
        final CheckBox cbDataSplit = view.findViewById(R.id.cb_data_split);
        cbDataSplit.setText(mSplitTBBH);
        final WindowManager mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
        mWindowManager.addView(view, createWindowLayoutParams());
        cbDataOrg.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                mDataChooseListener.onCheckOrgTB(cbDataOrg.isChecked());
            }
        });
        cbDataSplit.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                mDataChooseListener.onCheckSplitTB(cbDataSplit.isChecked());
            }
        });
        view.findViewById(R.id.btn_sure).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (cbDataOrg.isChecked()) {
                    mChooseTBs.add(mOrgTBBH);
                }
                if (cbDataSplit.isChecked()) {
                    mChooseTBs.add(mSplitTBBH);
                }
                if (mChooseTBs.size() <= 0) {
                    Toast.makeText(mContext, "请最少选择一个图斑!", Toast.LENGTH_SHORT).show();
                } else {
                    mDataChooseListener.onResult(mChooseTBs);
                    mWindowManager.removeView(view);
                }
            }
        });
    }

    private WindowManager.LayoutParams createWindowLayoutParams() {
        WindowManager.LayoutParams p = new WindowManager.LayoutParams();
        p.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
        p.width = WindowManager.LayoutParams.WRAP_CONTENT;
        p.height = WindowManager.LayoutParams.WRAP_CONTENT;
        p.format = PixelFormat.TRANSLUCENT;
        //作为系统窗口 需要权限
        p.type = WindowManager.LayoutParams.TYPE_APPLICATION;
        //控制布局区域外是否可以点击
        p.flags = WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
        p.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_UNCHANGED;
        //p.token = token;
        return p;
    }
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值