gpt4 book ai didi

addView 方法后未显示 Android View

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:14 25 4
gpt4 key购买 nike

我对 ViewGroup.addView() 方法有疑问。我使用此代码向我的布局添加新 View :

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);

然后我就看不到我的 TextView 了。不仅如此,parent.getChildCount() 返回正确的值(如果我尝试添加一个 child 则为 1)。在父 View 的 onClick() 方法中,我尝试获取 TextView 的宽度和高度,所有这些都等于 0。为 TableView 和父 View 调用 requestLayout()、invalidate() 和 measure(500, 50) 无效。我什至尝试在 view.post(Runnable) 的帮助下添加新 View ,尽管这段代码是在 UI 线程中执行的。

我很困惑。我真的不明白发生了什么。有人可以解释我做错了什么吗?

一个有趣的时刻:setLayoutParams() 无效。如果我将参数设置为 width=500 和 height=50,在 onClick 方法中我将获得 width=-1 和 height=-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();

我发现了一件更有趣的事情。此 Activity 从 TabHost 运行。并且仅当在此 TabHost 中首次选择 Activity 时才会出现“addView bug”。如果我第一次从另一个选项卡启动 Activity,一切正常。

最佳答案

我找到了解决方案。如果使用 android:animateLayoutChanges="false"关闭布局动画一切正常。但我仍然不知道为什么会这样。如果有人知道这种行为的原因,那对我来说很有趣。

关于addView 方法后未显示 Android View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23063893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com