Android 多窗口支持:检测状态栏是不是可见?
Posted
技术标签:
【中文标题】Android 多窗口支持:检测状态栏是不是可见?【英文标题】:Android Multi-Window Support : Detecting if status bar is visible?Android 多窗口支持:检测状态栏是否可见? 【发布时间】:2016-12-29 13:47:16 【问题描述】:借助 android 的多窗口支持,我如何检测状态栏是否可见?例如,在纵向时,如果我是顶部应用程序,状态栏可能可见,但当我是底部应用程序时,状态栏将不可见。现在,我的视图在底部时很有趣,因为我为不再存在的状态栏腾出了空间。
【问题讨论】:
不要以编程方式为状态栏腾出空间。使用 android:fitsSystemWindows , View.onApplyWindowInsets(), View.setOnApplyWindowInsetsListener(), Behavior.onApplyWindowInsets() ... 。这是一项艰巨的工作,但您不能依赖状态栏,我们在 N 之前就知道。我建议您花时间使用 WindowInsets 重新实现所有内容。 WindowInsets 以编程方式提供信息,但速度很慢。在找出真正的插图是什么之前,您会接到多个电话。 至于重新实现,我不想。我依赖于许多视图和一些库。它们并不都适合系统窗口。在所有制造商中重新实施和测试 Jelly Bean、KitKat 和 Marshmallow 是最后的手段。 是的,您将接到多个电话。这也是获得插图的唯一可靠方法。您认为 NavigationView 或 DrawerLayout 等支持库中的小部件如何处理它?没错,window insets listener(或者更确切地说是它的兼容对应物)。I don’t want to
- 我也不想要。但是这样我就可以优雅地更新到 N 了。这些建议必须遵循,否则您迟早会发现您的应用程序由于新的 API、新的制造商、具有不可预测插入的新设备而变得一团糟。
【参考方案1】:
假设你的意思是系统UI栏,即状态栏这样做:
View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener()
@Override
public void onSystemUiVisibilityChange(int visibility)
// Note that system bars will only be "visible" if none of the
// LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
// TODO: The system bars are visible. Make any desired
// adjustments to your UI, such as showing the action bar or
// other navigational controls.
else
// TODO: The system bars are NOT visible. Make any desired
// adjustments to your UI, such as hiding the action bar or
// other navigational controls.
);
这直接来自文档: https://developer.android.com/training/system-ui/visibility.html
【讨论】:
你在多窗口环境下测试过这个吗?对我来说似乎断章取义。我看不出这如何帮助 OP 确定他们需要抵消多少内容。 嗯,它的正确形式是谷歌文档。事实上谷歌已经对它进行了测试 在多窗口模式下系统 ui 可见性不会改变。无论是全屏还是多窗口模式,我都会得到相同的响应。 @FredGrott Ahem,至少从 KitKat 开始,该帖子就一直存在,并且代码完全符合其外观:报告全屏布局。它没有提供任何关于 system insets 的信息,这是 OP 所要求的。以上是关于Android 多窗口支持:检测状态栏是不是可见?的主要内容,如果未能解决你的问题,请参考以下文章