在表格布局中以编程方式添加行时,TextView在一行中显示文本

时间:2013-04-29 10:21:18

标签: android tablelayout tablerow

我的xml文件中的某个视图后面有一个表格布局。以下是代码。

<ScrollView>
   <LinearLayout>

..................................
.....................................
<Button
         android:id="@+id/fetchbutton"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="show details"
         android:layout_margin="6dip"
         android:layout_gravity="center_horizontal"
         android:onClick="buttonOnClick"/>

         <TableLayout
            android:id="@+id/mytable_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:orientation="vertical"
             >
        </TableLayout>

    </LinearLayout>
</ScrollView>

下面是以编程方式为表格布局添加行的代码:

public void buttonOnClick(View view)
    {
        showData();
    }
    public void showData()
    {

        List<DataSource> data = dbHelper.getData(selectedoption);
        TableLayout tl = (TableLayout)findViewById(R.id.mytable_layout);

        for(DataClass dataclass:data)
        {
            TableRow tr = new TableRow(ViewScreen.this);

            TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);

            tr.setLayoutParams(params);   

            TextView labelTV = new TextView(ViewScreen.this);
            labelTV.setText(dataclass.getColumnName());
            labelTV.setTextColor(Color.RED);
            TableRow.LayoutParams paramsTV1 = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
            labelTV.setLayoutParams(paramsTV1);
            tr.addView(labelTV);

            // Creating a TextView to house the value of the after-tax income
            TextView valueTV = new TextView(ViewScreen.this);
            valueTV.setText(dataclass.getColumnValue());
            valueTV.setTextColor(Color.BLACK);
            TableRow.LayoutParams paramsTV2 = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
            valueTV.setLayoutParams(paramsTV2);
            tr.addView(valueTV);

            // Adding the TableRow to the TableLayout
            tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));


        }

    }

根据上面的代码,它运行正常。但表格行总是有一行。根据内容,table row height不是increased。相反,文本的一部分离开屏幕而不可见。有人可以帮忙解决这个问题吗?

图片:

enter image description here

4 个答案:

答案 0 :(得分:0)

创建一个自定义的single_row.xml,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativeLayoutSingleRowRecordsDetailedView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ffffff" >

    <TextView
        android:id="@+id/textViewSingleRowRecordsDetailedViewCategoryField"
        android:layout_width="120dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="10dp"
        android:text="TextView"
        android:textColor="#04B4AE"
        android:textSize="15dp"
        android:typeface="sans" />

    <TextView
        android:id="@+id/textViewSingleRowRecordsDetailedViewCategoryFieldValue"
        android:layout_width="120dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:text="TextView"
        android:textColor="#000000"
        android:textSize="15dp"
        android:typeface="sans" />

</RelativeLayout>

然后在我的java代码中:

...
LayoutInflater inflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                final View view = inflate.inflate(R.layout.single_row_records_detailed_view, null);

                TextView tv_field_name = (TextView) view.findViewById(R.id.textViewSingleRowRecordsDetailedViewCategoryField);
                TextView tv_field_value = (TextView) view.findViewById(R.id.textViewSingleRowRecordsDetailedViewCategoryFieldValue);

                if(al_field_value.get(i).equals(""))
                {
                    null_count = null_count + 1;
                    continue;
                }
                else
                {
                    tv_field_name.setText(get_field_name(al_cat_field_id.get(i)));
                    tv_field_value.setText(al_field_value.get(i));
                }

                linearLayout_details.addView(view);
...

答案 1 :(得分:0)

尝试制作Textview多线。

在代码中添加以下行以使textview成为多行。

yourtextview.setSingleLine(false);

希望这会有所帮助

答案 2 :(得分:0)

将以下内容设置为tablelayout: -

tablename.setColumnShrinkable(ColumnIndex, true); 

答案 3 :(得分:0)

您可以设置tablelayout的shrinkable属性以获得所需的效果。来自Android开发者网站的文档:

  

列的宽度由具有最宽单元格的行定义   那一栏。但是,TableLayout可以将某些列指定为   通过调用setColumnShrinkable()或可收缩或可伸缩   setColumnStretchable()。如果标记为可收缩,则列宽可以   缩小以使表适合其父对象。如果标记为   可拉伸,可以扩展宽度以适应任何额外的空间。总数   表的宽度由其父容器定义。这很重要   要记住,柱子既可以收缩又可伸缩。在   这种情况下,列会改变它的大小,总是用完了   可用空间,但永远不会更多。最后,您可以隐藏列   调用setColumnCollapsed()。

示例:

<TableLayout
    android:id="@+id/fragment_print_job_detail_info_group"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:shrinkColumns="1"
    android:layout_margin="@dimen/image_button_margin"
    android:background="@drawable/round_corner_white_background_shape" >