获取导航/操作栏高度

时间:2017-11-29 19:20:50

标签: android xamarin xamarin.android

我有一个Xamarin Forms项目,该项目使用Android的自定义工具栏。 工具栏在axml中定义为Layout,我将工具栏的minHeight设置为标准操作栏的高度。

对于我的应用中的特定页面,我有一个自定义页面渲染器,我需要顶部(导航/操作)栏的高度。

我已经尝试使用FindViewByID获得高度并使用TypedValue获得高度,但这只给了我0回。

我还可以尝试在页面渲染器中获取条形的高度吗?

2 个答案:

答案 0 :(得分:1)

App.cs(公共代码)

public static int ActionBarHeight;

MainActivity,在OnCreate方法(Droid部分)中:

Android.Content.Res.TypedArray styledAttributes = Theme.ObtainStyledAttributes(new int[] { Android.Resource.Attribute.ActionBarSize });
App.ActionBarHeight = (int)(styledAttributes.GetDimension(0, 0) / Resources.DisplayMetrics.Density);
styledAttributes.Recycle();

如果你想要高度(以像素为单位):

App.ActionBarHeight = (int)styledAttributes.GetDimension(0, 0);

答案 1 :(得分:0)

在Xamarin Android中,只有在调用OnMeasure方法后才能获得视图的宽度和高度。 OnLayout方法将在OnMeasure之后调用。因此,您可以使用OnLayout方法获得宽度和高度。

class MyRender: PageRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
    {
        base.OnElementChanged(e);
    }

    protected override void OnLayout(bool changed, int l, int t, int r, int b)
    {
        System.Diagnostics.Debug.Write("OnLayout start");
        base.OnLayout(changed, l, t, r, b);
        for (int i = 0; i < ChildCount; i++)
        {
            Android.Views.View view = GetChildAt(i);
            int height = view.Height;
            int width = view.Width;
            System.Diagnostics.Debug.Write("height=" + height );
            System.Diagnostics.Debug.Write("width=" + width );
        }
        System.Diagnostics.Debug.Write("OnLayout end");

    }

}

在获得宽度和高度之前,您必须确保已调用OnMeasure,否则您将始终获得0。