我的情况是显示回收的视图,但我认为由于Android中的一些优化,它们不会重新布局。
许多帖子建议在回收的视图上调用view.layout(),我怀疑它会起作用。然而,它也意味着设置我自己的LayoutParams,虽然我很确定我可以让它工作,但我并没有真正掌握所有可用的信息,在那里重新开发的视图可以正确地进行。< / p>
此问题可能是嵌套LinearLayouts所特有的。当我运行测试时,通过折叠到单个LinearLayout,问题就消失了。
这是布局的简化版本,但失败了。在此示例中,将调用外部LinearLayout的onLayout()。如果调用内部布局的onLayout(),我不知道(没有更多的实验)。不会调用TextView的onLayout,也不会调用“其他内容”。
更新:未调用内部布局的onLayout()。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/node"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/note"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
... more stuff ...
</LinearLayout>
... more stuff ...
</LinearLayout >
哦,我应该提一下,这似乎只发生在运行Android API 19的设备上。
我希望有一种“正确”的方式来强制Android在其级别重新布局TextView和其他小部件。
答案 0 :(得分:0)
我发现了成员函数forceLayout(),我在下面的递归函数中使用了它。它似乎没有给我的应用程序添加任何重要的运行时开销。
public static void forceLayoutAndroid19 (ViewGroup vg)
{
if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.KITKAT)
{
for (int i = 0, limit = vg.getChildCount (); i < limit; i++)
{
View child = vg.getChildAt (i);
child.forceLayout ();
if (child instanceof ViewGroup)
forceLayoutAndroid19 ((ViewGroup)child);
}
}
}