From 53c5bd6a1abf401584314e919206ca696357c68c Mon Sep 17 00:00:00 2001 From: pw <329803553@qq.com> Date: Thu, 13 Oct 2022 15:03:43 +0800 Subject: [PATCH] fix the bug that PickView disappears --- .../builder/OptionsPickerBuilder.java | 15 ++++++++++++++- .../pickerview/builder/TimePickerBuilder.java | 15 ++++++++++++++- .../bigkoo/pickerview/view/BasePickerView.java | 18 +++++++++++------- .../pickerview/view/OptionsPickerView.java | 1 - .../bigkoo/pickerview/view/TimePickerView.java | 1 - 5 files changed, 39 insertions(+), 11 deletions(-) diff --git a/pickerview/src/main/java/com/bigkoo/pickerview/builder/OptionsPickerBuilder.java b/pickerview/src/main/java/com/bigkoo/pickerview/builder/OptionsPickerBuilder.java index 84eaa165..f30c8177 100644 --- a/pickerview/src/main/java/com/bigkoo/pickerview/builder/OptionsPickerBuilder.java +++ b/pickerview/src/main/java/com/bigkoo/pickerview/builder/OptionsPickerBuilder.java @@ -3,6 +3,7 @@ import android.content.Context; import android.graphics.Typeface; import android.support.annotation.ColorInt; +import android.support.annotation.LayoutRes; import android.view.View; import android.view.ViewGroup; @@ -102,7 +103,19 @@ public OptionsPickerBuilder setDecorView(ViewGroup decorView) { return this; } - public OptionsPickerBuilder setLayoutRes(int res, CustomListener listener) { + /** + * 设置选择器自定义布局 + * 注意:CustomListener不能为null, 否则该方法调用无效,即无法加载传入的自定义布局,详情查看 + * {@link OptionsPickerView#initView(Context)} + * + * @param res 自定义布局 + * @param listener 布局加载监听 + * @return OptionsPickerBuilder + */ + public OptionsPickerBuilder setLayoutRes(@LayoutRes int res, CustomListener listener) { + if (listener == null){ + throw new IllegalArgumentException("CustomListener is null"); + } mPickerOptions.layoutRes = res; mPickerOptions.customListener = listener; return this; diff --git a/pickerview/src/main/java/com/bigkoo/pickerview/builder/TimePickerBuilder.java b/pickerview/src/main/java/com/bigkoo/pickerview/builder/TimePickerBuilder.java index 9fcd75ca..feab5bc8 100644 --- a/pickerview/src/main/java/com/bigkoo/pickerview/builder/TimePickerBuilder.java +++ b/pickerview/src/main/java/com/bigkoo/pickerview/builder/TimePickerBuilder.java @@ -2,6 +2,7 @@ import android.content.Context; import android.support.annotation.ColorInt; +import android.support.annotation.LayoutRes; import android.view.View; import android.view.ViewGroup; @@ -155,7 +156,19 @@ public TimePickerBuilder setDate(Calendar date) { return this; } - public TimePickerBuilder setLayoutRes(int res, CustomListener customListener) { + /** + * 设置时间选择器自定义布局 + * 注意:CustomListener不能为null, 否则该方法调用无效,即无法加载传入的自定义布局,详情查看 + * {@link TimePickerView#initView(Context)} + * + * @param res 自定义布局 + * @param customListener 布局加载监听 + * @return TimePickerBuilder + */ + public TimePickerBuilder setLayoutRes(@LayoutRes int res, CustomListener customListener) { + if (customListener == null){ + throw new IllegalArgumentException("CustomListener is null"); + } mPickerOptions.layoutRes = res; mPickerOptions.customListener = customListener; return this; diff --git a/pickerview/src/main/java/com/bigkoo/pickerview/view/BasePickerView.java b/pickerview/src/main/java/com/bigkoo/pickerview/view/BasePickerView.java index 23879455..a2a51ba5 100644 --- a/pickerview/src/main/java/com/bigkoo/pickerview/view/BasePickerView.java +++ b/pickerview/src/main/java/com/bigkoo/pickerview/view/BasePickerView.java @@ -70,13 +70,6 @@ protected void initViews() { contentContainer.setLayoutParams(params); //创建对话框 createDialog(); - //给背景设置点击事件,这样当点击内容以外的地方会关闭界面 - dialogView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - dismiss(); - } - }); } else { //如果只是要显示在屏幕的下方 //decorView是activity的根View,包含 contentView 和 titleView @@ -277,6 +270,17 @@ protected BasePickerView setOutSideCancelable(boolean isCancelable) { } else { view.setOnTouchListener(null); } + + View pickViewContainer = rootView.findViewById(R.id.content_container); + pickViewContainer.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + //do nothing, just consume touch events to avoid that PickView + //disappears while clicking this PickView own area under the + //condition that setOutSideCancelable() is true + return true; + } + }); } return this; diff --git a/pickerview/src/main/java/com/bigkoo/pickerview/view/OptionsPickerView.java b/pickerview/src/main/java/com/bigkoo/pickerview/view/OptionsPickerView.java index 56a54801..4974e0ec 100644 --- a/pickerview/src/main/java/com/bigkoo/pickerview/view/OptionsPickerView.java +++ b/pickerview/src/main/java/com/bigkoo/pickerview/view/OptionsPickerView.java @@ -33,7 +33,6 @@ public OptionsPickerView(PickerOptions pickerOptions) { } private void initView(Context context) { - setDialogOutSideCancelable(); initViews(); initAnim(); initEvents(); diff --git a/pickerview/src/main/java/com/bigkoo/pickerview/view/TimePickerView.java b/pickerview/src/main/java/com/bigkoo/pickerview/view/TimePickerView.java index 2313a626..84c82ceb 100644 --- a/pickerview/src/main/java/com/bigkoo/pickerview/view/TimePickerView.java +++ b/pickerview/src/main/java/com/bigkoo/pickerview/view/TimePickerView.java @@ -35,7 +35,6 @@ public TimePickerView(PickerOptions pickerOptions) { } private void initView(Context context) { - setDialogOutSideCancelable(); initViews(); initAnim();