如何在xamarin.forms中获取状态栏的高度?

Nee*_*ati 2 size statusbar xamarin.forms

我正在尝试在应用程序中获取状态/操作栏的高度。我了解了一些如何在本机android中获取它的方法。我们可以在xamarin.forms中获取状态/操作栏的高度吗?如果有人对此有所帮助,请提供帮助。 在此处输入图片说明

ale*_*vru 6

您可以通过创建自己的依赖项服务来实现。(https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/dependency-service/introduction/

在共享代码中,创建一个接口,例如IStatusBar:

public interface IStatusBar
    {
        int GetHeight();
    }
Run Code Online (Sandbox Code Playgroud)

添加Android平台的实现:

[assembly: Dependency(typeof(StatusBar))]
namespace StatusBarApp.Droid
{
    class StatusBar : IStatusBar
    {
        public static Activity Activity { get; set; }

        public int GetHeight()
        {
            int statusBarHeight = -1;
            int resourceId = Activity.Resources.GetIdentifier("status_bar_height", "dimen", "android");
            if (resourceId > 0)
            {
                statusBarHeight = Activity.Resources.GetDimensionPixelSize(resourceId);
            }
            return statusBarHeight;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

活动属性是从MainActivity.cs设置的:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(bundle);

            global::Xamarin.Forms.Forms.Init(this, bundle);

            StatusBar.Activity = this;

            LoadApplication(new App());
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是从共享代码中调用实现的方式:

int statusBarHeight = DependencyService.Get<IStatusBar>().GetHeight();
Run Code Online (Sandbox Code Playgroud)

IOS平台的实现:

[assembly: Dependency(typeof(StatusBar))]
namespace StatusBarApp.iOS
{
    class StatusBar : IStatusBar
    {
        public int GetHeight()
        {
            return (int)UIApplication.SharedApplication.StatusBarFrame.Height;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Nic*_*ert 5

通用代码(在App.xaml.cs中)

public static int StatusBarHeight {get; set;}
Run Code Online (Sandbox Code Playgroud)

Android部分(在MainActivity.cs中,在OnCreate方法中)

int resourceId = Resources.GetIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0)
{
    App.StatusBarHeight = (int)(Resources.GetDimensionPixelSize(resourceId) / Resources.DisplayMetrics.Density);
}
Run Code Online (Sandbox Code Playgroud)

iOS 部分(在 AppDelegate.cs 中的 FinishedLaunching 方法中)

App.StatusBarHeight = (int)UIApplication.SharedApplication.StatusBarFrame.Height;
Run Code Online (Sandbox Code Playgroud)

因此 App.StatusBarHeight 将在 App 启动时初始化,然后您就可以在公共代码中的任何位置使用它。