Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
gitzgq opened this issue May 23, 2017 · 16 comments
Open

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

gitzgq opened this issue May 23, 2017 · 16 comments
Labels

Comments

@gitzgq
Copy link

gitzgq commented May 23, 2017

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

@xiaosong520
Copy link
Member

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

@gitzgq
Copy link
Author

gitzgq commented May 23, 2017

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

@xiaosong520
Copy link
Member

@gitzgq 这个方法也行

@gitzgq
Copy link
Author

gitzgq commented May 23, 2017

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

@xxwywzy
Copy link

xxwywzy commented Jul 12, 2017

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

@hwp88110
Copy link

hwp88110 commented Jan 16, 2018

解决了感谢,遇到了同样的问题,我的是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

@xiaosong520
Copy link
Member

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

@xiaosong520
Copy link
Member

xiaosong520 commented Jan 17, 2018

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

@zengx1998
Copy link

我的为什么还是不行啊

@zengx1998
Copy link

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

@sinduanan
Copy link

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

@huluwa-dev
Copy link

huluwa-dev commented Oct 20, 2020

大概看了下,可以通过更改内部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(R.id.content_container)?.updateLayoutParams<FrameLayout.LayoutParams> {
leftMargin = 0
rightMargin = 0
}
pvTime.show()

@AinialJing
Copy link

image
我是这样解决的。

@lyl21
Copy link

lyl21 commented Apr 2, 2021

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

@zengx1998
Copy link

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

@amanzan
Copy link

amanzan commented Nov 12, 2021

image This is how I solved it.

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

10 participants