我有一个Xamarin Forms项目,该项目使用Android的自定义工具栏。 工具栏在axml中定义为Layout,我将工具栏的minHeight设置为标准操作栏的高度。
对于我的应用中的特定页面,我有一个自定义页面渲染器,我需要顶部(导航/操作)栏的高度。
我已经尝试使用FindViewByID获得高度并使用TypedValue获得高度,但这只给了我0回。
我还可以尝试在页面渲染器中获取条形的高度吗?
答案 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。