Найдите тип вырезки на Android
Как я могу получить устройство с вырезом под вырез? РЕДАКТИРОВАТЬ: Поскольку мой вопрос не всем ясен (хотя я и был): я ищу флаг или какое-то перечисление, которое содержит тип выреза устройства. Это может выглядеть так: "CutoutType_Corner". Я не уверен, существует ли такое перечисление, я почти уверен, что это так.
Вы можете получить безопасные вставки краев для всех сторон, чтобы убедиться, что выемка (если есть) не закрывает какие-либо части пользовательского интерфейса. (Это важно только в том случае, если вы разрешите приложению также заполнять заданное пространство слева и справа от выемки, например, установив флаг окна LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES.)
В параметрах разработчика Android вы можете имитировать вырез экрана, выбрав одно из следующих значений:
- (Никто)
- Угловой вырез дисплея
- (Двойной вырез дисплея)
- Вырез для высокого дисплея
Эти параметры предназначены только для моделирования, но они также предоставляют такую же информацию, как если бы устройство действительно имело выбранный вырез, насколько я могу судить, поэтому также должен быть способ найти установленный тип.
Большая часть пользовательского интерфейса в моем случае (но и в целом во многих случаях) центрирована по горизонтали, не касаясь углов экрана.
Я хотел бы различать "угол" и "высокий" вырез, поскольку в моем случае угол не занимает важных частей экрана.-> Если экран вырезан в углу, я могу пренебречь безопасными вставками края.
В качестве наглядного примера: верхний экран от Samsung Galaxy S10 с вырезом в углу, нижний - от Google Pixel 3 с высоким вырезом:
"-Example-" умещается на экране с вырезом в углу, в то время как он закрыт высоким вырезом.
Спасибо!
1 ответ
Когда я попытался решить эту задачу, единственный подходящий API, который я смог найти, это DisplayCutout
:
val corners = view.rootWindowInsets?.displayCutout?.boundingRects
boundingRects возвращает прямоугольник выреза для каждого угла, и с помощью эвристики вы можете понять, какой тип вырезов у вас есть.