【问题标题】:Android view not shown after addView methodaddView 方法后未显示 Android 视图
【发布时间】:2014-05-28 15:17:42
【问题描述】:

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

然后我看不到我的 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();

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

【问题讨论】:

  • 看看这个:stackoverflow.com/a/13988763/833647 看来您需要以编程方式添加TableRow
  • 我更改了代码以添加 TableRow,但没有任何改变
  • 试试这个:parent.addView(tv, lp); 而不是最后两行(setLayoutParams 和 addView)。还有什么是指this 的textview?确保它返回正确的上下文。
  • Fllo,这种方式也行不通。这是指当前的活动
  • 你能用新代码编辑你的问题吗?我的意思是动态添加 TableRow。

标签: android ui-thread


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多