【问题标题】:Width is 0 after adding a child添加孩子后宽度为0
【发布时间】:2011-07-25 01:48:31
【问题描述】:

我正在制作一个需要动态加载布局项的应用程序。 我有一个 XML,其中包含将在舞台上多次添加的元素设计。另外,我有一个保存元素的 RelativeLayout。要将元素添加到 RelativeLayout 我使用这个:

...   
View child = View.inflate(context, R.layout.buildinglayout, null);
parrent.addView(child, parrent.getChildCount()); //parrent is the relativeLayout
...

您可能已经猜到,buildinglayout.xml 是元素的布局。一切都正确地添加到舞台上,显然没有问题。问题是该元素要适合舞台,所以我需要有一个围绕RelativeLayout 的ScrollView。唯一的问题是滚动视图没有检测到RelativeLayout的实际宽度和高度。所以...我这样做了:

...
View child = View.inflate(context, R.layout.buildinglayout, null);
parrent.addView(child, parrent.getChildCount()); //parrent is the relativeLayout
Log.v("BuildingView", "w:" + child.getWidth() + " h:" + child.getHeight());
Log.v("ParrentView", "w:" + parrent.getWidth() + " h:" + parrent.getHeight());
...

那些 Log.v 的输出是:

03-29 06:56:43.803: VERBOSE/BuildingView(480): w:0 h:0
03-29 06:56:43.803: VERBOSE/ParrentView(480): w:0 h:752

谁能告诉我该怎么做才能使 buildingview 和 parrent 的宽度和高度都正确?

附:我在模拟器设备上使用 Android 3.0

【问题讨论】:

    标签: android


    【解决方案1】:

    inflate 忽略了 xml 中指定的布局高度和宽度。设置子视图的布局参数或查看this 答案以了解如何使视图膨胀。

    【讨论】:

    • 好的!我发现了问题。 child.setX(pozX);和 child.setY(pozY);让一切都以一种奇怪的方式运行。问题是我不知道有任何其他方法可以为相对布局内的项目设置坐标
    【解决方案2】:

    在 UI 线程中添加的视图将在 UI 线程完成后反映。

    在 UI 线程完成后尝试查找宽度。

    只有它会给出实际的宽度和高度。

    【讨论】:

    • 问题是我并不需要实际的宽度和高度。我只需要 ScrollView 来相应地更新元素的宽度和高度。这些元素的总高度约为 850 像素,并且被清晰地切割……但似乎没有滚动条让我向下滚动。
    猜你喜欢
    • 1970-01-01
    • 2017-07-02
    • 2011-05-21
    • 1970-01-01
    • 2020-08-17
    • 2020-09-02
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多