以xamarin形式获取导航栏高度?

时间:2017-10-13 07:51:42

标签: xamarin.ios xamarin.forms xamarin.android navigationbar

我正在开展一个项目,我需要获取导航栏的高度。我使用以下方式获得整个屏幕高度:

Helpers.ApplicationContext.ScreenHeight = (int)Resources.DisplayMetrics.HeightPixels / Resources.DisplayMetrics.Density;
Helpers.ApplicationContext.ScreenWidth = (int)Resources.DisplayMetrics.WidthPixels / Resources.DisplayMetrics.Density;

但我无法获得导航栏高度。

任何人都可以提出建议来获取我页面的导航栏高度。

提前致谢。

1 个答案:

答案 0 :(得分:1)

对于iOS这可能会对您有所帮助:

var navbarHeight = YourViewControllerInstance.NavigationController?.NavigationBar.Frame.Height;

对于Android:

TypedArray styledAttributes = this.Theme.ObtainStyledAttributes(
new int[] { Android.Resource.Attribute.ActionBarSize });
var actionbarHeight = (int) styledAttributes.GetDimension(0, 0);
styledAttributes.recycle();

上面的示例给出了Pixel中的高度。请在下面找到更精确的样本,它提供Pixel和DP的高度:

TypedValue tv = new TypedValue();
int actionBarHeightInPixel = 0;
int actionBarHeightInDP = 0;
DisplayMetrics metrics = Resources.DisplayMetrics;

if (Theme.ResolveAttribute(Resource.Attribute.actionBarSize, tv, true))
{
    actionBarHeightInPixel = TypedValue.ComplexToDimensionPixelSize(tv.Data, metrics);
    actionBarHeightInDP = actionBarHeightInPixel / (int)metrics.Density;
}