Android TextView的高度和宽度为0

Android TextView的高度和宽度为0,android,Android,我有一个小项目,我想重用某个UI组件几次,所以我通过扩展一个视图组创建了一个小部件。在该视图组中,我膨胀了一个在线性布局中包含TextView的视图,并通过addView将膨胀后的视图添加到视图组中 外部LinearLayout可以完美地扩展自身,但当我通过层次结构查看器查看它时,内部TextView的getHeight()=0和getWith()=0。奇怪的是,布局高度和布局宽度是我在xml中给出的值 我这里没有代码,但看起来像这样: xml: <LinearLayout a

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

外部LinearLayout可以完美地扩展自身,但当我通过层次结构查看器查看它时,内部TextView的getHeight()=0和getWith()=0。奇怪的是,布局高度和布局宽度是我在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>  
我曾尝试为大小提供文本视图填充父值,但没有任何帮助。

1)以下是在您的开发人员手机上使用Hierarchy Viewer的一些链接

以及您需要的课程:

2) 您还可以像使用包含标记的组件一样重用布局:

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

所以,我悬赏了这一次,以下是我的发现

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


我提出的“解决方案”包括:;使用include(当您知道需要多少时)并将它们拉入代码中,或者将它们膨胀到父级(当您需要真正的动态,N个东西时)。当然,您膨胀的XML会有ID冲突,所以我会抓取我要查找的内容的最后一个子项(例如getChildAt(getChildCount()-1)),等等。

您是否尝试将自己作为根传递:

View.inflate(context, R.layout.xml, this); 
因为您将是该视图的父视图,该视图符合

记住:
getHeight()
getWidth()
如果组件尚未绘制,则返回
0


在绘制
视图之前查找其宽度和高度:

  • 第一次呼叫
    measure

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

    int width = view.getMeasuredWidth();
    int height = view.getMeasuredHeight();
    


  • 我在这里发布了更多的想法:

    您是否尝试在层次结构查看器中强制布局请求?如果它使textview显示,那么您可能面临一个框架错误(应该在API>8AFAIK中解决)。不,我不知道我能做到这一点。等我回来再试试。但是,我在我的小部件中尝试了几次forceLayout(),但都没有效果。也许你应该创建LinearLayout.LayoutParams(int-width,int-height)并将其设置为你的TextView?我想,你必须调用measure(…,…)TextView
    layout\u-width
    缺少一个
    d
    。这可能没有帮助。请确保删除
    addView(view)
    行,否则您将因尝试将视图分配给另一个父级而获得运行时异常。您已经完成了此操作。提供了一行答案,回答了所有安卓里奇人中最常见的问题。关于这个问题,我从来没有看到过这个答案。谢谢。你救了我。这是一个伟大的答案+1.
    int width = view.getMeasuredWidth();
    int height = view.getMeasuredHeight();