如何确定手机是否有缺口

How to find out if mobile has a notch or not

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

 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 带来了一些新问题。

Motorola One Power 现在的问题。

感谢帮助。如果您需要任何额外的东西,请告诉我。 谢谢

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

WindowInsets.getDisplayCutout()

参考this显示抠图支持文档。

对于那些仍在寻找中并需要摆脱那个缺口的人

android 开发人员在构建 Android Pie 时确实考虑了刘海设计。

但也许移动制造商还没准备好等到 Pie 发布,所以他们也为 Oreo 设备提供了缺口设计。让我们陷入麻烦。

无论如何,现在我能够处理凹口设计,但同样只适用于 Pie 设备。为此,我们只需要在 styles.xml.

中添加一行
<item name="android:windowLayoutInDisplayCutoutMode"> never </item>

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

  • defaultshortEdgesnever 的工作方式如下。

  • never 值可确保应用程序的 window 始终在横向和纵向模式下绘制在刘海下方,并且会出现信箱效应并使屏幕完全变黑缺口两侧的区域。

  • shortEdges 值使您的应用程序的 window 在缺口的两侧绘制,从而使应用程序在全屏模式下更加身临其境。它省去了无法使用的缺口区域。不会浪费屏幕空间!这在横向和纵向中都非常有效。

  • 默认选择default值它使状态栏调整到刘海的高度,并在纵向和横向模式下导致信箱。

Thanks to this article it helped me a lot.