近期在使用 Dialog 的过程中,出现过两个问题,也记录一下。
TextureView
当 Dialog 布局有 TextureView 时,运行报错:
1 | java.lang.UnsupportedOperationException: TextureView doesn't support displaying a background drawable |
说是 TextureView 不支持设置 background。可布局文件里压根就没设置 background。于是尝试将所有 View 的 background 全部去掉,仍然崩溃。然后尝试把 TexureView 从 xml 去掉,能正常运行。所以肯定还是 TextureView 的问题。
Google 了很久,也没找到问题所在,主要是很“无厘头”的崩溃,也没什么关键字。后面突然灵光一身,Dialog 会有 style,有没有可能是 style 导致的呢?使用的 style 是这样的:
1 | <style name="dialog__style" parent="@android:style/Theme.Dialog"> |
于是去掉 style,确实就没崩溃了。然后加上 style,挨个屏蔽属性,最终定位到是 android:background 属性导致崩溃的,猜测是这个属性会迭代 Dialog 中的 view 挨个去设置 background 导致的。
所以,在 Dialog 中使用 TextureView 时,Dialog 一定不要设置 android:background 的 style。
VideoView
在 Dialog 中使用 VideoView 时,播放视频感觉会是“很暗”的感觉。查阅资料最终发现 VideoView 是继承自 SurfaceView 的,Surface 是纵深排序(Z-ordered)的,很有可能就是这个排序导致的。于是调用setZOrderOnTop(true)
果然就好了。