Проблема с LayoutInDisplayCutoutMode в Xamarin

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

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.

3
0
1 356
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

LayoutInDisplayCutoutMode был добавлен на уровне API 28 (Pie).

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

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

На данный момент вы можете выполнить проверку уровня API,

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

In Android P we added APIs to let you manage how your app uses the display cutout area, as well as to check for the presence of cutouts and get their positions.

For devices running Android 8.1 (API 27), we've also back-ported the layoutInDisplayCutoutMode activity theme attribute so you can control the display of your content in the cutout area. Note that support on devices running Android 8.1 or lower is up to the device manufacturer, however.

To make it easier to manage your cutout implementation across API levels, we've also added DisplayCutoutCompat in the AndroidX library, which is now available through the SDK manager.

Другие вопросы по теме