在布局中渲染TextView之前获取TextView的高度

时间:2016-12-06 02:12:14

标签: c# android xamarin

首先,我在Xamarin for Android app中编写代码。

我试过的就是这个。

frame.AddView(background, LayoutParams.MatchParent, textViewA.Height);
frame.AddView(textViewA, LayoutParams.MatchParent, LayoutParams.WrapContent);

1)背景是具有背景的视图。

2)在设置了帧(FrameLayout的实例)后,我将此布局添加到TableRow

问题在于此。由于 textViewA.Height的值为0 ,我无法看到背景。 enter image description here

如果我将textViewA.Height更改为 LayoutParams.WrapContent LayoutParams.MatchParent ,则背景将覆盖孔页。

enter image description here

如果我将textViewA.Height更改为15,则背景将覆盖textView的一部分。

enter image description here

所以,(我认为)我必须知道textViewA的高度值的大小才能显示背景。 怎么做?帮助我。

1 个答案:

答案 0 :(得分:2)

  

我必须知道textViewA的高度值的大小才能显示背景。怎么做?

我们无法直接获取TextView的高度,因为到那时甚至可能都没有测量TextView。

如果您真的想获得textViewA的高度,请尝试以下代码

ViewTreeObserver vto =  textViewA.ViewTreeObserver;
vto.GlobalLayout += (sender, args) =>
{
    myTextViewHeight = textViewA.Height;
};

但是你在FrameLayout中测量textViewA。当你得到" myTextViewHeight"你的布局已经过测量。在将其添加到FrameLayout

之前,您仍将获得0高度

作为解决方法

  1. 你可以设置" textViewA.Height"在添加FrameLayout

  2. 之前
  3. 您可以将您的背景添加为默认值:

    frame.AddView(textViewA, LayoutParams.MatchParent, LayoutParams.WrapContent);
    frame.AddView(background);
    
  4. 顺便说一下,如果你只需要设置你的桌子的背景,在你的桌子中添加背景中的textview或者只是设置tablerow背景可能是更好的选择。