我有一个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
在充气后会有正确的Width
和Height
。
实际上,这适用于模拟器和某些设备,但在其他一些设备上,标签子元素会因为分配的字体大小为零而消失,这意味着v.Height
为零。
这段代码有效吗?是否记录Inflate
返回的视图是否应具有正确的尺寸?我应该从container
取代身高,如果是的话,是否记录在与ViewPager
一起使用时它将是非空的?
答案 0 :(得分:1)
问题是尚未在OnCreateView
方法中绘制视图。因此Height
很可能是一个意想不到的值。
好的,那么你怎么做才能获得视野的高度?使用ViewTreeObserver
获取PreDraw
事件,例如:
v.ViewTreeObserver.PreDraw += (s, e) =>
{
// do height calculations here
};
此外,我注意到您使用的是字体大小,请确保您没有使用像素高度,而是使用可缩放单位(sp)。这可能是您首先设置字体大小的原因。