最近遇到个怪问题,在其他手机上都能正常的显示Dialog,但是在Android7.0的手机上只能显示Dialog的半透明背景,无法显示Dialog的内容。
用图给大家展示一个遇到的现象,正常时应该是这个样子的:
而我们遇到的情况如下,更坏的是如果我们设置Dialog不能点击空白处取消(dismiss),那么这个半透明背景一直覆盖在Activity上面,只有通过杀进程重新运行应用才能去掉它。
因为项目工程比较大,排查这个问题也花费了很多时间。我最开始时在Android7.0写一个Demo显示Dialog发现是正常的,然后再在自己的框架上显示Dialog发现也是正常的,说明不是框架的问题。
在测试了一些怀疑地方没有效果后,只有用土办法挨个排查了,两个方向一个是不断的注释各个模块看是否正常显示,第二个是从正常开始加上各个模块看那个模块代码加上了出问题。最后发现罪魁祸首是下面这段代码:
Resourcesresources=context.getResources();Configurationconfig=resources.getConfiguration();//解决修改系统字体大小时,应用页面布局、字体等显示或者排版混乱问题config.setToDefaults();
在Application的onCreate方法会执行这段代码去设置资源的Configuration。再分析setToDefaults的源码,主要是进行了如下的初始化设置:
/***Setthisobjecttothesystemdefaults.*/publicvoidsetToDefaults(){fontScale=1;mcc=mnc=0;locale=null;userSetLocale=false;touchscreen=TOUCHSCREEN_UNDEFINED;keyboard=KEYBOARD_UNDEFINED;keyboardHidden=KEYBOARDHIDDEN_UNDEFINED;hardKeyboardHidden=HARDKEYBOARDHIDDEN_UNDEFINED;navigation=NAVIGATION_UNDEFINED;navigationHidden=NAVIGATIONHIDDEN_UNDEFINED;orientation=ORIENTATION_UNDEFINED;screenLayout=SCREENLAYOUT_UNDEFINED;uiMode=UI_MODE_TYPE_UNDEFINED;screenWidthDp=
白癜风药
北京的权威白癜风专家