如何确定手机是否有缺口

时间:2018-10-15 09:59:40

标签: android xml screen android-toolbar android-8.0-oreo

如果存在缺口,我需要修改应用程序的工具栏。现在,该缺口在工具栏中隐藏了一部分内容。

 if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP || Build.VERSION.SDK_INT == Build.VERSION_CODES.M) {
        setTheme(R.style.AppTheme_NoActionBarHello);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        SystemBarTintManager tintManager = new SystemBarTintManager(this);
        tintManager.setStatusBarTintEnabled(true);
        tintManager.setTintColor(ContextCompat.getColor(this, R.color.white));
    } else initStatusBar();

initStatusBar方法

private void initStatusBar() {

    Window window = getWindow();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        SystemBarTintManager tintManager = new SystemBarTintManager(this);
        tintManager.setStatusBarTintEnabled(true);
        tintManager.setTintColor(ContextCompat.getColor(this, R.color.white));
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        Window w = getWindow(); // in Activity's onCreate() for instance
        w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    }

}

我的应用程序中没有任何通知栏。工具栏本身以白色覆盖所有区域,以实现使用上述代码保持兼容。 但是,notch作为它的新功能带来了一些问题。

摩托罗拉One Power目前存在问题。

帮助表示赞赏。让我知道您是否还需要其他任何东西。 谢谢

2 个答案:

答案 0 :(得分:0)

您可以通过以下方法获取DisplayCutout对象:

  

WindowInsets.getDisplayCutout()

请参阅this显示抠图支持文档。

答案 1 :(得分:0)

对于仍在搜索中并且需要摆脱该缺憾的人

Android开发人员在构建 Android Pie 时确实考虑了缺口设计。

但是也许移动制造商不愿意等到 Pie 发布,所以他们也将缺口设计也提供给 Oreo 设备。并使我们陷入困境。

无论如何,现在能够处理槽口设计,但仅适用于Pie个设备。为此,我们只需要在styles.xml中添加一行即可。

<item name="android:windowLayoutInDisplayCutoutMode"> never </item>

values-v28目录中创建一个新的res文件夹,并将默认的styles.xml文件复制到其中,然后在现有主题的上方添加一行。

  • defaultshortEdgesnever的工作方式如下。

  • never的值可确保应用程序的窗口始终以横向和纵向模式绘制在凹口下方,并且会受到信箱打折的影响,并使凹口两侧的区域完全变黑。

  • shortEdges值使您的应用程序窗口在凹口的两侧绘制,从而使应用程序更加沉浸在全屏模式中。它留下了无法使用的缺口区域。没有屏幕的房地产浪费!这在横向和纵向模式下均可完美运行。

  • 默认情况下,default值是选中的,它使状态栏的大小调整为凹口的高度,并在纵向和横向模式下都导致装箱。

Thanks to this article it helped me a lot.