0

我正在开发一个根据用户设置的字符串创建动态界面的应用程序。

我的 XML 文件中唯一的东西是 a 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 循环中,我创建ButtonsTextViews并将它们TableRow添加到 中TableLayout,然后将其添加到 中,然后将LinearLayout其添加到添加到ScrollView.

我的问题是:我希望Buttons200dp 宽,然后是TextView,但目前它的宽度来自WRAP_CONTENT. 当我将它Button添加RelativeLayout到.setLayoutParamsTableRow

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可能是一种不同的方法,但我似乎找不到任何 java 示例,只有 XML - 我需要它是动态的。

4

1 回答 1

0

RelativeLayout.LayoutParams当您ButtonTextView是 a 的孩子时使用的原因是TableRow什么?它应该是这样的:

TableRow.LayoutParams rel_btn = new TableRow.LayoutParams(pixels, pixels);
btn.setLayoutParams(rel_btn);

另外,你真的需要LinearLayout包装TableLayout吗?如果您没有将其LinearLayout用于其他用途,则应将其删除以改善视图层次结构。

于 2012-07-31T11:59:39.750 回答