我正在创建一个TableLayout来动态填充数据。我在这里面临的问题是行不能水平放入屏幕。 这是我想要的观点,
\-----------------------------------------------------\
\| Student Name | Q1 | Q2 | Q3 | Total | % |\
\-----------------------------------------------------\
但问题是,由于学生名称是一个很大的行(宽度),其他行不适合屏幕, 它们看起来如下图所示,从Q4开始,所有行都不适合屏幕。
\------------------------------------\----------------
\| Student Name | Q1 | Q2 | Q3 \| Total | % |
\------------------------------------\----------------
这是我用来动态创建此视图的代码
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无法正常工作
答案 0 :(得分:1)
我认为您希望将学生姓名上的文字换行到下一行。
要解决的第一件事是layout_width
。将layout_width
的{{1}}值设置为ScrollView
/ match_parent
。对标题fill_parent
(TableRow
)以及表格中的每一行执行相同操作。需要明确的是,trHeader
本身layout_width
应保持TableLayout
/ match_parent
。
这样做可以确保所有这些视图都符合父母的宽度。这仍然不能完全解决问题,因为行中的视图仍然是&#34; push&#34;超出表格容器宽度的列。
第二步是将fill_parent
上的shrinkColumns
设置为TableLayout
。这将尽可能缩小第一列,直到表适合屏幕(或其容器),文本将换行。或者,如果希望缩小所有列,可以将其设置为"1"
。