我正在开发一个应用程序,它根据用户设置的字符串创建动态界面。
我在XML文件中唯一得到的是ScrollView
,其余的是在java代码中:
ScrollView sv = (ScrollView)findViewById(R.id.sv);
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
TableLayout tl = new TableLayout(this);
TableRow[] tr = null;
然后我解读一个字符串,它会告诉我需要添加多少个按钮。每个Button
旁边应该是TextView
。在for循环中,我创建了Buttons
和TextViews
并将它们添加到TableRow
,我添加到TableLayout
,我添加到LinearLayout
ScrollView
1}}我添加到Buttons
。
我的问题是:我希望TextView
为200dp宽,然后是WRAP_CONTENT
,但目前宽度为Button
。使用RelativeLayout
和setLayoutParams
设置TableRow
的大小时,将其添加到final float scale = getBaseContext().getResources().getDisplayMetrics().density;
int pixels = (int) (200 * scale + 0.5f);
RelativeLayout.LayoutParams rel_btn = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
rel_btn.height = pixels;
rel_btn.width = pixels;
btn.setLayoutParams(rel_btn);
tr[i].addView(btn);
tr[i].addView(tv);
tl.addView(tr[i]);
时无效。
TableLayout
有没有人知道如何使用LinearLayouts
解决问题?
我已经读过嵌套的{{1}}可能是一种不同的方法,但我似乎无法找到任何java示例,只有XML - 我需要它是动态的。
答案 0 :(得分:0)
当RelativeLayout.LayoutParams
和Button
是TextView
的孩子时,使用TableRow
的原因是什么?它应该是这样的:
TableRow.LayoutParams rel_btn = new TableRow.LayoutParams(pixels, pixels);
btn.setLayoutParams(rel_btn);
另外,你真的需要包裹LinearLayout
的{{1}}吗?如果您没有将TableLayout
用于其他内容,则应将其删除以改进视图层次结构。