Проблема с LayoutInDisplayCutoutMode в Xamarin - PullRequest
0 голосов
/ 03 февраля 2019

У меня странная проблема с установкой атрибута для режима выреза в Xamarin.Android.Я хочу добавить поддержку в моем приложении для режима выреза, поэтому я обновил проект, чтобы использовать SDK 9.0, и добавил одну строчку в свой Activity:

Window.Attributes.LayoutInDisplayCutoutMode = LayoutInDisplayCutoutMode.ShortEdges;

Мой проект компилируется, но когда он запускается, я получаю этоисключение в строке выше:

Java.Lang.NoSuchFieldError: no "I" field "layoutInDisplayCutoutMode" in class "Landroid/view/WindowManager$LayoutParams;" or its superclasses

Мои настройки проекта:

Compile using Android version: Android 9.0 (Pie)

Minimum Android version: Android 4.3 (API Level 18)

Target Android version: Android 9.0 (API Level 28)

Все новейшие библиотеки nuget.

1 Ответ

0 голосов
/ 03 февраля 2019

LayoutInDisplayCutoutMode был добавлен на уровне API 28 (круговая диаграмма).

Существует более старая поддержка API устройств через «новые» AndroidX «Compat» библиотеки для режимов вырезания (androidx.core.view.DisplayCutoutCompat), но Microsoft/ Xamarin до сих пор не опубликовал публичную поддержку для них.

Существует множество проблем на основе github, связанных с этим пробелом в функциях (для таких вещей, как новый AndroidX WorkManager и другие, мне приходилось создавать свою собственную привязку ...)

Теперь вы можете выполнить проверку уровня API,

if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.P)
{
    Window.Attributes.LayoutInDisplayCutoutMode = LayoutInDisplayCutoutMode.ShortEdges;
}

В Android P мы добавили API, чтобы вы могли управлять своимиПриложение использует область выреза дисплея, а также проверяет наличие вырезов и получает их позиции.

Для устройств под управлением Android 8.1 (API 27) мы также перенесли обратно атрибут темы деятельности layoutInDisplayCutoutModeтак что вы можете контролировать отображение вашего контента в вырезСубъективная.Обратите внимание, что поддержка на устройствах под управлением Android 8.1 или ниже зависит от производителя устройства.

Чтобы упростить управление реализацией выреза на всех уровнях API, мы также добавили DisplayCutoutCompat в библиотеку AndroidX, котораятеперь доступен через менеджер SDK.

...