我有 ViewGroup.addView() 方法的问题。我使用此代码向我的布局添加新视图:
TalbeLayout parent = (TableLayout)findViewById(R.id.this_does_not_matter);
parent.removeAllViews(); //this view group contains something at start
TextView tv = new TextView(this);
tv.setText("some text");
TableLayout.LayoutParams lp = new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(lp);
parent.addView(tv);
Run Code Online (Sandbox Code Playgroud)
之后我就看不到我的 TextView。不仅如此,parent.getChildCount() 返回正确的值(如果我尝试添加一个孩子,则为 1)。在父视图的 onClick() 方法中,我尝试获取 TextView 的宽度和高度,所有这些都等于 0。为 TableView 和父级调用 requestLayout()、invalidate() 和 measure(500, 50) 没有效果。我什至尝试在 view.post(Runnable) 的帮助下添加新视图,尽管此代码是在 UI 线程中执行的。
我糊涂了。我真的不明白会发生什么。有人可以解释我做错了什么吗?
一个有趣的时刻: setLayoutParams() 没有效果。如果我设置了宽度=500 和高度=50 的参数,在onClick 方法中,我会得到宽度=-1 和高度=-1 的参数。
添加 TableRow 后的代码:
TableLayout parent = (TalleLayout)findViewById(R.id.this_does_not_matter);
parent.removeAllViews(); //this view group contains something at start
TextView tv = new TextView(this);
tv.setText("some text");
TableLayout.LayoutParams lp = new TableLayout.LayoutParams(500, 50);
TableRow.LayoutParams tlp = new TableRow.LayoutParams(500, 50);
TableRow tr = new TableRow(this);
tr.addView(tv, tlp);
parent.addView(tr, lp);
parent.invalidate();
parent.requestLayout();
Run Code Online (Sandbox Code Playgroud)
我发现了一件更有趣的事情。此活动从 TabHost 运行。并且“addView 错误”仅在此 TabHost 中首次选择 Activity 时才会出现。如果我第一次从另一个选项卡启动 Activity,一切正常。
我找到了解决方案。如果使用 android:animateLayoutChanges="false" 关闭布局动画,一切正常。但我仍然不知道为什么会发生这种情况。如果有人知道这种行为的原因,这对我来说很有趣。
| 归档时间: |
|
| 查看次数: |
3284 次 |
| 最近记录: |