栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Dialog设置宽高问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Dialog设置宽高问题

最近在做需求的时候,由于有大量的弹窗,所以基本上弹窗都使用了Dialog进行实现。但是没想到Dialog真难用啊。最令人崩溃的就是它的宽高问题了,Dialog会忽视根布局中的宽高设置,最终宽度会由Dialog的style中的android:windowMinWidthMinor属性决定,高度会表现为wrap_content,所以说在根布局中设置宽高是没有用的,而这个属性也往往不能满足我们的需求,下面我根据不同的情况写一下如何设置Dialog的宽高。

一、Dialog宽高固定

刚刚提到,由于根布局的宽高属性会被忽略,如果我们想实现固定宽高的Dialog,可以选择在根布局之下再包一层布局,将这个布局的宽高写成固定值即可。然而Dialog会默认的自带一个状态栏的高度,这个高度会让我们设置Dialog位置的时候不符合预期,此外需要一般需要开启背景暗淡。因此需要给Dialog设置Style,如下


        
        true
        
        true
    

使用方法让Dialog继承这个就行,如下

class ProvinceSelectorDialog(context: Context) : Dialog(context, R.style.ProvinceDialog)

当然用代码设置宽高也可以,代码的优先级应该高于style。

二、Dialog全屏

和固定宽高不同,如果要使Dialog全屏的话并不需要在布局中多包一层,上文提到根布局的宽高属性会被忽略,而宽由Dialog的style中的android:windowMinWidthMinor属性决定,高度会表现为wrap_content。那么我们依然想办法在style中解决全屏的问题。先看结果


        
        true
        false
        
        true
        
        #00ffffff
        
        true
    

采用这些属性即可达到全屏的效果。我做一下简单的解释,采用windowIsFloating为false可以使Dialog悬浮在Activity上,可以达到一个伪全屏的效果,类似在代码中设置宽高为match_parent。之所以叫伪全屏是因为它上下左右还有一定的间距。尤其是上方会有一个状态栏,即使设置了windowNoTitle为true,依然会有。因此需要搭配windowFullscreen为true。这样就可以去除状态栏。去除状态栏之后,设置背景透明即可达到一个理想的全屏效果。但是当打开Dialog时状态栏会呈现黑色,因此需要加上状态栏透明。

当然肯定也有方法在代码中做到,但我认为关于布局的问题,尽量不在代码中解决,代码中应该更注重业务逻辑的编写,尽量不让它们写在一起。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770378.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号