关于在不完全遮挡activity的时候dialog的显示问题

博客探讨了如何在Android中创建一个自定义Dialog,使其显示在Activity上方但不完全遮挡Activity,类似图1和图2的效果。作者发现Android自带的DatePicker不满足需求,因此采用自定义View,参考了https://github.com/liuwan1992/CustomDatePicker的实现,但做了一些修改,使得Dialog可以在非屏幕边缘的位置显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想一下,怎么才能够实现,在一个Activity上面有一个Dialog,是用来显示滑动的日期,并且Dialog的位置不是处在屏幕的最上方或最下方,就像下图:

图1      图2

先来分析一下:

1.首先从图中能看出有一个Activity,一个关于Date的Dialog;

2.Dialog显示在Activity的上方,并且没有全部遮挡Activity;

3.Dialog并不是直接在屏幕的上方或下方或中间;


实现过程:

1.先实现DateDialog部分:

Android自带的有DatePicker(日期选择器),在我的模拟器上,使用DatePicker,是如下显示


我发觉,Android自带的DatePicker,并不符合我要实现的效果,那只能用自定义View了;

我们要做的自定义View,是如上图2的样子,对于布局和逻辑部分,我借鉴了别人的博客,地址为

https://github.com/liuwan1992/CustomDatePicker

他实现的就是Dialog遮挡Activity显示,位置在屏幕的下方;

而要实现我的效果图的话,只需要:

1.Dialog不遮挡Activity,

<item name="android:windowIsFloating">false</item><!-- 是否浮现在activity之上 -->
windowIsFloating属性设置为false, 默认将Window设置成全屏大小,设置为true,则window大小为wrap_content。
当然,只将这个属性设置为false,结果就会把整个Activity都遮住了,怎么才能让Dialog不遮挡Activity呢,给Dialog一个高度
lp.height = 800;
Dialog有了固定值后,就显示这么大,高度就不会为match_parent,就解决了一个问题;
2.给Dialog设置距离上方或者下方多少,
lp.y = 500;
y轴的距离,如果
window.setGravity(Gravity.BOTTOM);
用的是BOTTOM,lp.y = 500;就是相对于下方500dp的距离;
如果window.setGravity(Gravity.TOP);
用的是TOP,lp.y = 500;就是相对于上方500dp的距离。

以上就能实现效果。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值