Xamarin (Android): обнаружение, имеет ли устройство метку на дисплее или нет - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь определить, имеет ли устройство, на котором запущено мое приложение, метку или нет.

В этом есть то, что мне нужно, но я не смог найти эквивалент Xamarin для getDisplayCutout () в классе WindowInset.

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Мне удалось «решить» эту проблему, измерив размер строки состояния и сравнив ее с известным / безопасным порогом.

Не буду утверждать, что это лучшее решение этого вопроса, но оно не подходит для устройств, которые я тестировал до сих пор.

        private const int __NOTCH_SIZE_THRESHHOLD = 40; //dp

        /// <summary>
        /// Device has a notched display (or not)
        /// </summary>
        public bool HasNotch
        {
            get
            {

                // The 'solution' is to measure the size of the status bar; on devices without a notch, it returns 24dp.. on devices with a notch, it should be > __NOTCH_SIZE_THRESHHOLD (tested on emulator / S10)
                int id = MainActivity.Current.Resources.GetIdentifier("status_bar_height", "dimen", "android");
                if (id > 0)
                {
                    int height = MainActivity.Current.Resources.GetDimensionPixelSize(id);
                    if (pxToDp(height) > __NOTCH_SIZE_THRESHHOLD)
                        return true;
                }
                return false;
            }
        }
        /// <summary>
        /// Helper method to convert PX to DP
        /// </summary>
        private int pxToDp(int px)
        {
            return (int)(px / Android.App.Application.Context.Resources.DisplayMetrics.Density);
        }
0 голосов
/ 07 февраля 2020

Существуют некоторые различия между нативным Android и Xamarin. Android.

В вашем случае метод getDisplayCutout () в Xamarin. Android - это свойство только для чтения, которое называется DisplayCutout .

public DisplayCutout DisplayCutout { get; }

Вы можете получить к нему доступ, как

Android.Views.WindowInsets window = new WindowInsets(cpoySrc);
var Cutout = window.DisplayCutout;

cpoySr c - источник WindowInsets. Чек https://docs.microsoft.com/en-us/dotnet/api/android.views.windowinsets.-ctor?view=xamarin-android-sdk-9

...