以编程方式设置layoutparams时,视图未在布局中显示

时间:2012-10-17 08:33:34

标签: android android-layout

每次我设置TextView的布局参数来包装内容或填充父级时它都没有显示在视图中,但是当我将它设置为像素时,它的工作原理是什么?

以下是相关代码:

items = (LinearLayout) findViewById(R.id.llmain);
        tb = new TableLayout(MainActivity.this);

        tb.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        tb.setGravity(Gravity.CENTER);


            TableRow tr = new TableRow(MainActivity.this);
            ImageButton ima = new ImageButton(MainActivity.this);
            ImageButton imr = new ImageButton(MainActivity.this);
            TextView tvin = new TextView(this);

            TableRow.LayoutParams trp = new TableRow.LayoutParams();
            trp.setMargins(0, 0, 0, 10);
            tr.setLayoutParams(trp);
            tr.setGravity(Gravity.CENTER);

            ima.setBackgroundColor(Color.TRANSPARENT);
            ima.setImageResource(R.drawable.add);

            imr.setBackgroundColor(Color.TRANSPARENT);
            imr.setImageResource(R.drawable.remove);

            tvin.setWidth(100);
            tvin.setHeight(45);
            tvin.setGravity(Gravity.CENTER);
            tvin.setText(sil[i]);
            tvin.setBackgroundColor(Color.rgb(200, 0, 255));

            tr.addView(ima);
            tr.addView(tvin);
            tr.addView(imr);

            tb.addView(tr);

        items.addView(tb);

我尝试使用此

tvin.setLayoutParams(new LayoutParams(
            LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));

和这个

tvin.setWidth(LayoutParams.FILL_PARENT);
tvin.setHeight(LayoutParams.FILL_PARENT);

但这些都不起作用。

3 个答案:

答案 0 :(得分:4)

尝试:

tvin.setLayoutParams(new TableRow.LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT));

并删除tvin.setWidth和height。

在这种情况下,您应始终设置视图的父级TableRow的布局参数。 MATCH_PARENT没有区别,但它是一个新名称,你应该使用它而不是FILL_PARENT。

答案 1 :(得分:1)

在此行中你必须使用高度和宽度.. TableRow.LayoutParams trp = new TableRow.LayoutParams();像这样

TableRow row = new TableRow(context);
row.setLayoutParams(new android.widget.TableRow.LayoutParams(android.widget.TableRow.LayoutParams.FILL_PARENT,
                android.widget.TableRow.LayoutParams.WRAP_CONTENT));

答案 2 :(得分:1)

尝试使用LinearLayout.LayoutParams

    TextView tvin = new TextView(this);
    LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    tvin.setLayoutParams(llp);