问题标签 [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.
java - 在 Android 上查找 Notch Cutout 类型
如何获得设备的缺口切口类型?编辑:因为我的问题对每个人都不是很清楚(我虽然是这样):我正在寻找一个包含设备切口类型的标志或某种枚举。它可能看起来像:“CutoutType_Corner”。我不确定这样的枚举是否存在,我很确定它确实存在。
您可以获得所有侧面的安全边缘插图,以确保缺口(如果有)没有覆盖 UI 的任何部分。(这仅在您通过设置窗口标志 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 使应用程序也填充凹槽左侧和右侧的给定空间时才重要。)
在 android 开发人员选项中,您可以通过以下选择来模拟显示剪切:
- (没有任何)
- 角落显示切口
- (双屏抠图)
- 高显示切口
这些选项只是为了模拟,但据我所知,它们也提供了与设备确实具有所选切口相同的信息,因此还应该有一种方法可以找到设置类型。
在我的例子中,大部分 UI(但在许多情况下也是如此)水平居中,没有真正触及屏幕的角落。
我想区分“角落”和“高”切口,因为在我的情况下,角落并没有真正占据屏幕的重要部分。-> 如果屏幕是切角,我可以忽略安全边缘插图。
作为一个视觉示例:上面的屏幕来自三星 Galaxy S10,带有一个边角切口,下一个是带有高切口的 Google Pixel 3:
“-Example-”安装在角落切口屏幕上,而它被高切口覆盖。
谢谢!
google-maps - 状态栏下的 Xamarin.Forms 应用程序(显示抠图)
我正在创建一个应用程序,其中将通过 Xamarin.Forms 在主页上显示 GoogleMaps。我希望应用看起来像 Google 地图应用:
所以像在状态栏下显示的东西。在 iPhone X 上,这很容易。但是对于Android,它不起作用。
我的应用现在看起来像这样:
现在有趣的部分。我正在使用 Xamarin Shell,当我打开 Flyout 菜单时,它看起来像这样:
所以我的弹出菜单显示在状态栏下,但地图没有。我在想这是否是map nuget的问题?我正在使用这个 GoogleMaps nuget 来显示地图:amay077/Xamarin.Forms.GoogleMaps
或者也许这是我的 xaml 结构的问题。
简化的 xaml 代码:
非常感谢和快乐编码
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 中找到一种方法来检查当前处于活动状态的哪种景观(例如,手机顶部是左侧还是右侧)。如果我能检查一下,我至少可以只在手机边缘需要它的地方应用插图。
android - 如何在android api 27上从不布局InDisplayCutoutMode?
此代码完美适用于 api 级别 28。如何在 android api 27 上执行此操作?
我试过这个,但它不工作
android - 活动未在横向切口下方延伸
在我的活动中,我使用以下代码打开/关闭全屏。全屏是指隐藏/显示状态栏。该问题发生在具有 Cutout(有摄像头的位置)并且状态栏可见且处于横向状态的设备上。当状态栏被隐藏或/和纵向时,它会扩展。
如图所示,左侧的白色区域应被覆盖。
https://i.stack.imgur.com/7va88.png
选定的解决方案将获得 50 分奖励。谢谢!
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 30
in 时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 将忽略该标志。文档没有说它已被弃用或删除,所以...... ?????
flutter - 在颤动中识别屏幕切口位置
我的应用在其顶部区域有一个搜索栏。有带有特殊切口的设备。为了将应用程序扩展到真正的全屏,我添加到<app_name>\android\app\src\main\AndroidManifest.xml
:
这很好用。然而,下一步显然是识别剪切位置,并相应地放置搜索栏:
提到的文档是指一种JAVA
方法WindowInsets.getDisplayCutout()
。我想知道是否有等价的flutter
或包装它的插件。