无法以编程方式在Android的TableLayout中水平放置所有行

时间:2015-10-22 10:38:27

标签: android android-tablelayout

我正在创建一个TableLayout来动态填充数据。我在这里面临的问题是行不能水平放入屏幕。 这是我想要的观点,

\-----------------------------------------------------\
\|   Student Name    | Q1 | Q2 | Q3  | Total | % |\
\-----------------------------------------------------\

但问题是,由于学生名称是一个很大的行(宽度),其他行不适合屏幕, 它们看起来如下图所示,从Q4开始,所有行都不适合屏幕。

\------------------------------------\---------------- 
\|   Student Name    | Q1 | Q2 | Q3  \| Total | % |
\------------------------------------\----------------

Student Report table

这是我用来动态创建此视图的代码

students_table.xml

<ScrollView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scrollbars="none">

    <TableLayout
        android:id="@+id/maintable"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        />
</ScrollView>

QuestionPaperChecking.java

 /** Table Row - Header */
    trHeader = new TableRow(mContext);
    trHeader.setLayoutParams(new TableLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));

    /* Student name */
    TextView tvStudentName = new TextView(mContext);
    tvStudentName.setText("Student Name");
    tvStudentName.setTextColor(Color.WHITE);
    tvStudentName.setGravity(Gravity.CENTER_VERTICAL);
    tvStudentName.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
    tvStudentName.setBackgroundColor(getColor(mContext, R.color.background_blue_light));
    tvStudentName.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    tvStudentName.setPadding(10, 10, 10, 10);
    trHeader.addView(tvStudentName);

    /* Question 1 */
    TextView tvQ1 = new TextView(mContext);
    tvQ1.setText("Q1");
    tvQ1.setTextColor(Color.WHITE);
    tvQ1.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
    tvQ1.setBackgroundColor(getColor(mContext, R.color.background_blue_light));
    tvQ1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    tvQ1.setPadding(10, 10, 10, 10);
    tvQ1.setGravity(Gravity.CENTER_VERTICAL);
    trHeader.addView(tvQ1);

    //Similarly I have created all other rows

    // Add the TableRow Header to the TableLayout
    tblBattingSide.addView(trHeader, new TableLayout.LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT));

注意:stretchColumns&amp; shrinkColumns无法正常工作

1 个答案:

答案 0 :(得分:1)

我认为您希望将学生姓名上的文字换行到下一行。

要解决的第一件事是layout_width。将layout_width的{​​{1}}值设置为ScrollView / match_parent。对标题fill_parentTableRow)以及表格中的每一行执行相同操作。需要明确的是,trHeader本身layout_width应保持TableLayout / match_parent

这样做可以确保所有这些视图都符合父母的宽度。这仍然不能完全解决问题,因为行中的视图仍然是&#34; push&#34;超出表格容器宽度的列。

第二步是将fill_parent上的shrinkColumns设置为TableLayout。这将尽可能缩小第一列,直到表适合屏幕(或其容器),文本将换行。或者,如果希望缩小所有列,可以将其设置为"1"