问题标签 [display-cutouts]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1292 浏览

java - 在 Android 上查找 Notch Cutout 类型

如何获得设备的缺口切口类型?编辑:因为我的问题对每个人都不是很清楚(我虽然是这样):我正在寻找一个包含设备切口类型的标志或某种枚举。它可能看起来像:“CutoutType_Corner”。我不确定这样的枚举是否存在,我很确定它确实存在。

您可以获得所有侧面的安全边缘插图,以确保缺口(如果有)没有覆盖 UI 的任何部分。(这仅在您通过设置窗口标志 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 使应用程序也填充凹槽左侧和右侧的给定空间时才重要。)

在 android 开发人员选项中,您可以通过以下选择来模拟显示剪切:

  • (没有任何)
  • 角落显示切口
  • (双屏抠图)
  • 高显示切口

这些选项只是为了模拟,但据我所知,它们也提供了与设备确实具有所选切口相同的信息,因此还应该有一种方法可以找到设置类型。

在我的例子中,大部分 UI(但在许多情况下也是如此)水平居中,没有真正触及屏幕的角落。

我想区分“角落”和“高”切口,因为在我的情况下,角落并没有真正占据屏幕的重要部分。-> 如果屏幕是切角,我可以忽略安全边缘插图。

作为一个视觉示例:上面的屏幕来自三星 Galaxy S10,带有一个边角切口,下一个是带有高切口的 Google Pixel 3:

视觉上的切口类型。

“-Example-”安装在角落切口屏幕上,而它被高切口覆盖。

谢谢!

0 投票
0 回答
423 浏览

google-maps - 状态栏下的 Xamarin.Forms 应用程序(显示抠图)

我正在创建一个应用程序,其中将通过 Xamarin.Forms 在主页上显示 GoogleMaps。我希望应用看起来像 Google 地图应用:
状态栏下的谷歌地图

所以像在状态栏下显示的东西。在 iPhone X 上,这很容易。但是对于Android,它不起作用。
我的应用现在看起来像这样:
我的应用现在的样子

现在有趣的部分。我正在使用 Xamarin Shell,当我打开 Flyout 菜单时,它看起来像这样:
Flyout 显示在状态栏下

所以我的弹出菜单显示在状态栏下,但地图没有。我在想这是否是map nuget的问题?我正在使用这个 GoogleMaps nuget 来显示地图:amay077/Xamarin.Forms.GoogleMaps

或者也许这是我的 xaml 结构的问题。

简化的 xaml 代码:

非常感谢和快乐编码

0 投票
1 回答
1711 浏览

java - WindowInsets.getDisplayCutout 在全屏 Java 应用程序中除 onAttachedToWindow 之外的任何地方都为 NULL

getDisplayCutout()在全屏 Java 应用程序中遇到问题。我似乎只能在onAttachedToWindow函数中获得 DisplayCutout 的值。该功能完成后,我再也无法获得它。获取切口的代码:

问题

一旦附加到视图层次结构中,如何随时从代码中的任何位置可靠地获取显示切口?

重现问题

经过大量调查后,我将其缩小为全屏应用程序的一个非常广泛的问题,我很惊讶没有其他人询问它。事实上,我们可以忽略我的应用程序,只处理两个您现在可以自己制作的模板项目。

在 Android 工作室中,我正在谈论称为“基本活动”和“全屏活动”的手机和平板电脑项目。如果您创建其中一个,并进行以下更改:

对于 Basic,更改 Manifest 以自行处理配置更改,方法是android:configChanges="orientation|keyboardHidden|screenSize"在 Activity 标记下添加,如下所示:

现在对于他们两个,将以下两个函数添加到活动文件中:

这就是重现此问题所需要做的一切。我在 API Q 上的 Pixel 3 模拟器上运行它,在该模拟器上我启用了模拟切口并选择了 BOTH(所以底部和顶部都有一个切口)

现在,如果您在我们尝试获取显示切口 ( DisplayCutout displayCutout = insets.getDisplayCutout();) 的行上设置断点,您将在 Basic 应用程序中看到它在启动更改方向时有效,但在全屏应用程序中它仅在启动时有效。

事实上,在我的应用程序中,我已经使用以下代码进行了测试onAttachedToWindow

此代码启动一个线程,以便 onAttachedToWindow 函数可以完成运行;但线程立即将执行发送回 UI 线程以检查切口。

onAttachedToWindow 函数完成其执行与我的代码检查 displayCutout 之间的延迟必须在纳秒级,但切口立即不可用。

有任何想法吗?这是以某种方式预期的吗?

当方向改变时无法访问切口我别无选择,只能记录最大的插图(纵向的顶部或底部,因为长边不能有它们),并将其应用于纵向的顶部和底部,或左侧和右侧在景观中。

这是因为我无法在 android 中找到一种方法来检查当前处于活动状态的哪种景观(例如,手机顶部是左侧还是右侧)。如果我能检查一下,我至少可以只在手机边缘需要它的地方应用插图。

0 投票
0 回答
71 浏览

android - 如何在android api 27上从不布局InDisplayCutoutMode?

此代码完美适用于 api 级别 28。如何在 android api 27 上执行此操作?

我试过这个,但它不工作

0 投票
1 回答
169 浏览

android - 活动未在横向切口下方延伸

在我的活动中,我使用以下代码打开/关闭全屏。全屏是指隐藏/显示状态栏。该问题发生在具有 Cutout(有摄像头的位置)并且状态栏可见且处于横向状态的设备上。当状态栏被隐藏或/和纵向时,它会扩展。

如图所示,左侧的白色区域应被覆盖。

https://i.stack.imgur.com/7va88.png

选定的解决方案将获得 50 分奖励。谢谢!

0 投票
1 回答
87 浏览

android - 如何设置全屏切出显示心情自带的底栏颜色

我想实时实现全屏活动,并以应用程序样式添加了此代码

并在活动中添加了这个

我做到了

在此处输入图像描述

我想将该底栏的颜色更改为白色

0 投票
0 回答
130 浏览

java - 支持 Android 12(API 级别 31)中的显示切口?

根据https://developer.android.com/guide/topics/display-cutout#choose_how_your_app_handles_cutout_areas所说的,我正在使用该LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES标志来支持在横向模式下渲染到相机剪切区域。我的代码如下所示:

使用compileSdk 30in 时build.gradle,一切都很好。但是在尝试 31 时,我收到一个WrongConstant错误,描述如下:

Must be one or more of: LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON, LayoutParams.FLAG_DIM_BEHIND, LayoutParams.FLAG_BLUR_BEHIND, LayoutParams.FLAG_NOT_FOCUSABLE, LayoutParams.FLAG_NOT_TOUCHABLE, LayoutParams.FLAG_NOT_TOUCH_MODAL, LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING, LayoutParams.FLAG_KEEP_SCREEN_ON, LayoutParams.FLAG_LAYOUT_IN_SCREEN, LayoutParams.FLAG_LAYOUT_NO_LIMITS, LayoutParams.FLAG_FULLSCREEN , LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, LayoutParams.FLAG_DITHER, LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SCALED, LayoutParams.FLAG_IGNORE_CHEEK_PRESSES, LayoutParams.FLAG_LAYOUT_INSET_DECOR, LayoutParams.FLAG_ALT_FOCUSABLE_IM, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_SHOW_WHEN_LOCKED, LayoutParams.FLAG_SHOW_WALLPAPER, LayoutParams.FLAG_TURN_SCREEN_ON, LayoutParams.FLAG_DISMISS_KEYGUARD, LayoutParams .FLAG_SPLIT_TOUCH,LayoutParams.FLAG_HARDWARE_ACCELERATED,LayoutParams.FLAG_LAYOUT_IN_OVERSCAN,LayoutParams.FLAG_TRANSLUCENT_STATUS,LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,LayoutParams.FLAG_LOCAL_FOCUS_MODE,LayoutParams.FLAG_LAYOUT_ATTACHED_IN_DECOR,LayoutParams.FLAGROUNDSDRAWS

它仍然可以编译,但我预计这意味着 Android 12 将忽略该标志。文档没有说它已被弃用或删除,所以...... ?????

0 投票
0 回答
40 浏览

android - Android - 全屏应用和 windowLayoutInDisplayCutoutMode

我最近正在尝试编写一个应用程序。我希望它是全屏的,但图标不会绘制到 Notch 切口中。我已经尝试按照 DisplayCutoutMode、shortEdges 的说明进行操作......但仍然无法弄清楚如何修复它。谁能帮我?

这就是我想要的

这就是我所拥有的

0 投票
1 回答
49 浏览

flutter - 在颤动中识别屏幕切口位置

我的应用在其顶部区域有一个搜索栏。有带有特殊切口的设备。为了将应用程序扩展到真正的全屏,我添加到<app_name>\android\app\src\main\AndroidManifest.xml

这很好用。然而,下一步显然是识别剪切位置,并相应地放置搜索栏:

剪切选项

提到的文档是指一种JAVA方法WindowInsets.getDisplayCutout()。我想知道是否有等价的flutter或包装它的插件。