Android TextView的高度和宽度为0

时间:2011-04-28 14:34:19

标签: android

我有一个小项目,我想在几次重用某个UI组件,所以我通过扩展ViewGroup创建了一个小部件。在该ViewGroup中,我在一个包含LinearLayout内的TextView的视图中膨胀,并通过addView将该膨胀的视图添加到ViewGroup。

外部LinearLayout完美展开,但当我通过Hierarchy Viewer查看时,内部TextView的getHeight()= 0和getWith()= 0。奇怪的是layout_height和layout_width是我在xml中给出的值。

我这里没有代码,但它看起来像这样:

xml:

<LinearLayout  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent">  

    <TextView  
        android:text="random text.."  
        android:layout_with="200px"  
        android:layout_height="50px" />  
</LinearLayout>  

爪哇:

class MyWidget extends ViewGroup {
...

//In constructor  
myView = View.inflate(context, R.layout.xml, null);  
addView(myView);  

//In layout  
myView.layout(l, t, r, b);  

我试图给出我的文本视图fill_parent值的大小,但它没有帮助。

4 个答案:

答案 0 :(得分:109)

  

请记住:getHeight()getWith()返回0 如果尚未绘制组件


要在绘制之前找到View 的宽度和高度:

  1. 首先致电measure

    view.measure(MeasureSpec.UNSPECIFIED,MeasureSpec.UNSPECIFIED)
    
  2. 现在,您可以使用getMeasuredWidth获取宽度,使用getMeasuredHeight

    获取高度
    int width = view.getMeasuredWidth();
    int height = view.getMeasuredHeight();
    

  3. 我已发布了更多想法:How to get width/height of a View

答案 1 :(得分:4)

1)以下是在您的手机上使用Hierarchy Viewer的一些链接。

http://developer.android.com/guide/developing/debugging/debugging-ui.html

以及您需要的课程:

http://github.com/romainguy/ViewServer

2)您还可以使用include标记重用布局:

<include android:id="@+id/your_id" layout="@layout/layout_name" />

答案 2 :(得分:1)

所以,我在这个上放了一笔赏金,这就是我找到的。

使用null引用进行充气是一个坏主意(TM)。从本质上讲,该View将无法获得所需的正确布局参数(其父级设置了一大堆它们,涉及一大堆魔术/逻辑)。因此,膨胀为null意味着没有父项,也没有继承的布局参数。一个可以手动设置一些这些参数,但由于涉及到魔法,它可能无法解决您的问题。

我提出的“解决方案”涉及到;使用include(当你知道你需要多少时)并将它们拉入代码,或者膨胀到父级(当你需要真正的动态,N个东西时)。当然,你膨胀的XML会发生ID冲突,所以我通过抓住最后一个孩子(例如getChildAt(getChildCount() - 1)来解决这个问题,等等。

答案 3 :(得分:0)

你是否尝试过自己作为根:

View.inflate(context, R.layout.xml, this); 

由于您将成为此视图的父级,符合the javadoc spec