在OnCreateView中膨胀视图时,它是否应该在创建后立即具有正确的大小?

时间:2014-03-29 19:34:53

标签: android-layout android-fragments xamarin.android font-size layout-inflater

我有一个Fragment课程,我与Android.support.v4.view.ViewPager一起使用。

在寻呼机需要显示另一个页面时调用的OnCreateView,我创建了一个标签,我想在该标签内动态设置一些字体大小为标签的百分比&#39 ;高度:

class LabelFragment : Android.Support.V4.App.Fragment
{
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        var v = inflater.Inflate(Resource.Layout.Label, container, false);

        float BigFontSize = v.Height / 1.5f;
        float MediumFontSize = v.Height / 5.0f;
        float SmallFontSize = v.Height / 10.0f;

        // Setting font sizes for the children of v

        return v;
    }
}

当我编写此代码时,我的理解是v在充气后会有正确的WidthHeight

实际上,这适用于模拟器和某些设备,但在其他一些设备上,标签子元素会因为分配的字体大小为零而消失,这意味着v.Height为零。

这段代码有效吗?是否记录Inflate返回的视图是否应具有正确的尺寸?我应该从container取代身高,如果是的话,是否记录在与ViewPager一起使用时它将是非空的?

1 个答案:

答案 0 :(得分:1)

问题是尚未在OnCreateView方法中绘制视图。因此Height很可能是一个意想不到的值。

好的,那么你怎么做才能获得视野的高度?使用ViewTreeObserver获取PreDraw事件,例如:

v.ViewTreeObserver.PreDraw += (s, e) =>
{
    // do height calculations here
};

此外,我注意到您使用的是字体大小,请确保您没有使用像素高度,而是使用可缩放单位(sp)。这可能是您首先设置字体大小的原因。