我有一个需要固定在屏幕底部的视图。在全屏中,它需要位于最底层,但在临时非全屏(在用户点击时),它需要向上移动而不被系统栏隐藏。文档说设置android:fitsSystemWindows = true应该可以解决问题。或者您甚至可以覆盖fitSystemWindows以获取新边界并自行应用边距。
问题是这个方法永远不会被调用,因此该属性也不起作用,似乎没有任何我可以做的事情。在ActionBarOverlayLayout上看起来像fitSystemWindows是罪魁祸首:它始终从它的方法返回true,这似乎取消了该方法传播到树中的任何其他视图。但是,这是一个系统类,除了可能完全删除操作栏之外,它看起来并不像我可以做的那样让它停止这样做。
我知道我必须遗漏一些东西。是否只能设置一个视图以避免被系统组件踩踏?这只是一个视频播放器,我看到很多其他视频播放器似乎没有这个问题。谢谢你的帮助!
答案 0 :(得分:2)
这里的问题是fitSystemWindows的默认实现吞下了所有子项的事件,当您使用重叠ActionBar时,您的整个视图层次结构位于吞噬您需要的事件的视图下方。不幸的是,除了不使用ActionBar之外,你无能为力。
然后你必须记住,默认的fitSystemWindows(在ViewGroup上定义)也会吞下所有兄弟姐妹的事件!因此,如果你想让兄弟视图避开系统窗口,你需要编写自己的fitSystemWindows并确保始终返回false,以便事件将传播到可能需要它的其他视图。
我理解为什么谷歌不会把这个事件发送给孩子们(因为插图是一个绝对的位置,如果父视图已经重新定位,孩子们不再需要担心它),而是将它放在地板上以供所有兄弟使用观点已成为一个错误。