Android 锁屏状态下Dialog不显示问题

1、概述

大家都知道系统自带的Dialog真的是很丑,所以很多时候弹框我们都需要自定义。然而最近做项目的时候,发现在三星Android 9.0和部分android 8.0的手机上,在锁屏状态下弹出的自定义Dialog只有半透明背景,没有内容。对这个问题刚开始也是一脸茫然,不知道怎么解决,因为网上也没有类似的问题,最后只能慢慢的试,看看是哪儿出了问题,最后发现该问题是因为使用的主题引起的。所以记录一下,以免忘记!

2、问题代码

修改前使用的主题如下:

    

其实@android:style/Theme.Holo.Light.Dialog这个主题平时我们使用的还是比较多,以前一直没有发现会有这样的问题。除了@android:style/Theme.Holo.Light.Dialog还有@android:style/Theme.Material.Dialog@style/Theme.AppCompat.Dialog@android:style/Theme.Material.Light.Dialog@style/Theme.AppCompat.Light.Dialog@android:style/Theme.Holo.Dialog等等的主题都会出现这样的问题。而@android:style/Theme.Material.Dialog.Alert@style/Theme.AppCompat.Dialog.Alert@android:style/Theme.Material.Light.Dialog.Alert@style/Theme.AppCompat.Light.Dialog.Alert却可以正常的显示出来,通过对比发现后面的主题,比前面的主题多了windowMinWidthMajorwindowMinWidthMinor这两个属性。因此猜测可能是因为这两个属性引起的,通过实验发现确实是如此,给前面6个主题添加上这两个属性之后就不会出现显示不出来的问题了。由此可见,是因为没有给Dialog设置最小的宽度,导致dialog在锁屏状态下显示不出来的。下面我们一起来看一看怎么解决。

3、解决办法
1、方法一

上面说了这个问题是由于没有设置最小宽度引起的,所以我们只需要将继承的主题修改为设置了这两个属性的主题即可。将@android:style/Theme.Holo.Light.Dialog换成@android:style/Theme.Material.Dialog.Alert@style/Theme.AppCompat.Dialog.Alert@android:style/Theme.Material.Light.Dialog.Alert@style/Theme.AppCompat.Light.Dialog.Alert其中之一即可。但是这几个主题里面给button设置了样式会导致你自定义的按钮有阴影边,因此需要覆盖button的样式,代码如下:

    
    
	
    
2、方法二

除了上面的方法,我们还可以通过添加windowMinWidthMajorwindowMinWidthMinor这两个属性来解决,从名字不难看出这两个属性表示的是窗口的最小宽度,只不过一个是主要的,一个是次要的,修正后的代码如下:

    

需要注意的是,windowMinWidthMajorwindowMinWidthMinor这两个属性的值不能设置为0,不然和没有设置的效果是一样的,同样会导致显示不出来。

通过使用上面的方法,就可以解决锁屏状态Dialog弹不出来的问题了。在此记录一下,希望对你们有所帮助!

你可能感兴趣的:(android问题)