在Android layout_weight中,用于动态表中的表行

时间:2013-10-02 13:33:43

标签: android android-layout

我正在动态创建表行并在新行中添加两个TextView。这样做很好,但现在我正在尝试格式化LayoutParams,以便两个TextViews的layout_weight分别为1。我尝试添加一些LayoutParams,但看起来它们被忽略了。这是我创建行的代码,我已经注释掉了LayoutParams位,当我运行应用程序时没有任何变化,它告诉我,LayoutParams被忽略了。 我需要一些帮助,将layout_weight分配给两个TextView,以便在我的行创建代码中我可以实现这个

        <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_weight="1" />

所以这是我创建行的代码:

        TableLayout tl = (TableLayout) findViewById(R.id.pres_table);

    for (int ctr = 0; ctr < pres_res.size(); ctr++)

    {
        final String pst_str = pres_res.get(ctr);
        final String yrs_str = yrs_res.get(ctr);

        TableRow tr = new TableRow(this);
        /*
        TableRow.LayoutParams trPara = new TableRow.LayoutParams(
                TableRow.LayoutParams.MATCH_PARENT,
                TableRow.LayoutParams.WRAP_CONTENT);
        int leftMargin = 10;
        int topMargin = 2;
        int rightMargin = 10;
        int bottomMargin = 2;
        trPara.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);
        tr.setLayoutParams(trPara);

         */
        TextView tv1 = new TextView(this);
        tv1.setText(pst_str);
        tv1.setTextColor(Color.BLACK);
        tv1.setTextSize(18);

        TextView tv2 = new TextView(this);
        tv2.setText(yrs_str);
        tv2.setTextColor(Color.BLACK);
        tv2.setTextSize(18);

        tr.addView(tv1);
        tr.addView(tv2);
        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    }

和创建表的XML是基本的,如下所示:

            <TableLayout
            android:id="@+id/pres_table"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#FFFFFF" >
        </TableLayout>

谢谢!

2 个答案:

答案 0 :(得分:2)

// try this way
        TextView tv1 = new TextView(this);
        tv1.setLayoutParams(new TableRow.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f));
        tv1.setText(pst_str);
        tv1.setTextColor(Color.BLACK);
        tv1.setTextSize(18);

        TextView tv2 = new TextView(this);
        tv2.setLayoutParams(new TableRow.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f));
        tv2.setText(yrs_str);
        tv2.setTextColor(Color.BLACK);
        tv2.setTextSize(18);

        tr.addView(tv1);
        tr.addView(tv2);
        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.WRAP_CONTENT));

答案 1 :(得分:0)

首先,感谢Geobits让我走上正确的道路让我知道我在错误的地方调用了LayoutParams。它们需要应用于TextView,而不是表行。然后基于此,我发现了一个StackOverflow帖子:Set the layout weight of a TextView programmatically其中第二个答案是我的解决方案。所以现在我的代码看起来像这样,它按我想要的方式工作:

        TableLayout tl = (TableLayout) findViewById(R.id.pres_table);

    for (int ctr = 0; ctr < pres_res.size(); ctr++)

    {
        final String pst_str = pres_res.get(ctr);
        final String yrs_str = yrs_res.get(ctr);

        TableRow tr = new TableRow(this);
        /*
        TableRow.LayoutParams trPara = new TableRow.LayoutParams(
                TableRow.LayoutParams.MATCH_PARENT,
                TableRow.LayoutParams.WRAP_CONTENT);
        int leftMargin = 10;
        int topMargin = 2;
        int rightMargin = 10;
        int bottomMargin = 2;
        trPara.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);
        tr.setLayoutParams(trPara);
        tr.setLayoutParams(new LayoutParams(
        LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));

         */
        LayoutParams tvPar = new TableRow.LayoutParams(0,LayoutParams.WRAP_CONTENT, 1f);
        TextView tv1 = new TextView(this);
        tv1.setLayoutParams(tvPar);
        tv1.setText(pst_str);
        tv1.setTextColor(Color.BLACK);
        tv1.setTextSize(18);

        TextView tv2 = new TextView(this);
        tv2.setLayoutParams(tvPar);
        tv2.setText(yrs_str);
        tv2.setTextColor(Color.BLACK);
        tv2.setTextSize(18);

        tr.addView(tv1);
        tr.addView(tv2);
        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    }

在注释掉的位下面是显示新LayoutParams tvPar代码的解决方案。