-1

我正在尝试检测运行我的应用程序的设备是否有缺口。

有我需要的,但我无法在 WindowInset 类中找到 getDisplayCutout() 的 Xamarin 等效项。

4

2 回答 2

0

本机 Android 和 Xamarin.Android 之间存在一些差异。

在您的情况下,Xamarin.Android 中的方法getDisplayCutout()是名为DisplayCutout的只读属性。

public DisplayCutout DisplayCutout { get; }

你可以像访问它

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

cpoySrc 是一个源 WindowInsets。检查https://docs.microsoft.com/en-us/dotnet/api/android.views.windowinsets.-ctor?view=xamarin-android-sdk-9

于 2020-02-07T01:48:58.077 回答
0

我设法通过测量状态栏的大小并将其与已知/安全阈值进行比较来“解决”这个问题。

不会声称这是解决这个问题的最佳解决方案,但它与我迄今为止测试过的设备相得益彰。

        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);
        }
于 2020-03-03T01:38:44.487 回答