Android-PickerView icon indicating copy to clipboard operation
Android-PickerView copied to clipboard

在自己的dialog里面显示选择器

Open gitzgq opened this issue 7 years ago • 16 comments

1、我现在已经显示了一个dialog(自定义布局) 2、这个dialog里面有个按钮,点击这个按钮,原有的dialog不消失,然后显示选择器,这个时候,选择器显示在dialog的后面,完全被挡住了,你可以试一下。

gitzgq avatar May 23 '17 06:05 gitzgq

@gitzgq 3.2.5版本已经支持自定义设置控件的父容器了,通过setDecorView方法把Popupwindow 的id 传入即可解决被遮挡的问题。

xiaosong520 avatar May 23 '17 08:05 xiaosong520

我看了自定义布局样式,加上.isDialog(true) 这个,就可以了,但是不是从底部弹出的 而是中间弹出的

gitzgq avatar May 23 '17 08:05 gitzgq

@gitzgq 这个方法也行

xiaosong520 avatar May 23 '17 08:05 xiaosong520

谢谢大神 用这样.setDecorView((ViewGroup) mPwView) 是从底部弹出的

gitzgq avatar May 23 '17 09:05 gitzgq

我也是在自定义的dialog中点击按钮弹出PickerView时被DIalog遮挡住了,但我用了setDecorView并没有效果/(ㄒoㄒ)/~~

xxwywzy avatar Jul 12 '17 14:07 xxwywzy

解决了感谢,遇到了同样的问题,我的是DialogFragment,使用.setDecorView((ViewGroup)getDialog().getWindow().getDecorView())即可解决,从底部弹出,并且在dialogfragment之上;同样试了一下自定义的dialog,要使用.setDecorView((ViewGroup)dialog.getWindow().getDecorView()),效果同上。

Ps.自己百度了一下,decorView是window中的最顶层view,可以从window中通过getDecorView获取到decorView。拿到最上层的view,传给选择器,即可实现在最上层显示选择器,不知道理解对不对

Ps.Ps.但是选择器弹出的动画效果会无效,会直接出现选择器,选择器收回的动画效果还在(测试机型小米5s,系统MIUI9 8.1.11开发版,Android 7.0) @xiaosong520

hwp88110 avatar Jan 16 '18 10:01 hwp88110

@hwp88110 估计是动画的style 属性没有做好适配, 建议先在自己项目覆盖一下进出动画的属性pickerview_dialog_scale_in 和 pickerview_dialog_scale_out 这两个文件(默认的是弹出到中间,可以修改成弹出到底部),然后设置为dialog 模式。这样应该可以实现需求。

xiaosong520 avatar Jan 17 '18 08:01 xiaosong520

@hwp88110 说错了,是 pickerview_slide_in_bottom 和 pickerview_slide_out_bottom。 上面scale 的那个是 dialog 模式的动画。dialog 模式适配需要修改 BasePickerView 里面createDialog 方法 的代码,并将Dialog 设置为 Gravity.BOTTOM

xiaosong520 avatar Jan 17 '18 08:01 xiaosong520

我的为什么还是不行啊

zengx1998 avatar Jul 14 '20 15:07 zengx1998

.setDecorView((ViewGroup)dialog.getWindow().getDecorView()) 我的使用这样还是不行的 但是.isDialog(true) 是没有问题的

zengx1998 avatar Jul 14 '20 15:07 zengx1998

@xiaosong520 您好,我这个也是自己写个弹窗,这个弹窗是居中显示的,然后弹窗中点一个按钮想再屏幕下方弹出pickerview,但是我按照上面的方法 最终只是从自定义弹窗的底部弹出的,如何做到从屏幕底部弹出呢。

sinduanan avatar Aug 26 '20 05:08 sinduanan

大概看了下,可以通过更改内部dialog的参数来实现,以下为kotlin代码。 val pvTime = TimePickerBuilder(context) { date, _ -> // 回调代码 } .isDialog(true) .build() // 设置底部显示 pvTime.dialog?.window?.setGravity(Gravity.BOTTOM) // 设置弹出动画 pvTime.dialog?.window?.setWindowAnimations(R.style.picker_view_slide_anim) // 去除两边的margin pvTime?.dialog?.findViewById<ViewGroup>(R.id.content_container)?.updateLayoutParams<FrameLayout.LayoutParams> { leftMargin = 0 rightMargin = 0 } pvTime.show()

huluwa-dev avatar Oct 20 '20 07:10 huluwa-dev

image 我是这样解决的。

AinialJing avatar Mar 27 '21 03:03 AinialJing

image 我是这样解决的。 有用,多谢您了

lyl21 avatar Apr 02 '21 01:04 lyl21

image 我是这样解决的。 成功解决啦 谢谢大佬 大佬知道这是为什么嘛

zengx1998 avatar Apr 02 '21 06:04 zengx1998

image This is how I solved it.

This does not solve the issue for me; I still see the picker behind the DialogFragment

amanzan avatar Nov 12 '21 10:11 amanzan