我有一点麻烦使桌子看起来像我打算。 这些是几个问题,但由于它们都是参考下面的图片和我提供的细节,我认为它们都应该在一个帖子中。
这是我到目前为止所取得的成就:
标题行包含一个Button类型的元素。
TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
Button bt = new Button(getContext());
bt.setText("Column1");
mHeader.addView(bt, params);
mHeader.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
addView(mHeader);
表格的其余部分如下所示:
(Messagerow扩展了TableRow并具有TextView成员)
for(int i = 0; i < 100; i++) {
MessageRow mr = new MessageRow(getContext());
// stuff to set the TexView text and color
mr.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
this.addView(mr);
}
的 1。如何使标题行高度更像行?
2。如何使按钮占据行的整个宽度?
如果表是空的,没有文本行只是标题,那么按钮匹配行宽。只要我添加一行文本,就会调整列宽,但按钮宽度不是。
第3。如何使行填充屏幕宽度? (MATCH_PARENT不这样做)
4。如何在表格行之间画一条细线?
我试图覆盖MessageRow上的onDraw()函数,但它永远不会被调用,甚至不会被调用
别误会我的意思。我不是要求你为我做我的工作。这些是我试图自己解决的问题,并用谷歌搜索并阅读类似的帖子,但没有找到答案。
注意:我发现Javascript for Android中的UI设计缺乏明确的控制和明确的文档这些小细节。
修改
这就是我创建表格的方式:
TableLayout mTable = new TableLayout(this);
HorizontalScrollView hview = (HorizontalScrollView) findViewById(R.id.hscroll);
populate(mTable);
mTable.setLayoutParams(new TableLayout.LayoutParams( TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
mTable.setBackgroundColor(Color.WHITE);
hview.addView(mTable);
答案 0 :(得分:2)
- 如何使标题行高度更像行?
醇>
使用默认Button
没什么可做的。 Button
使用九个补丁图像,在按钮的文本和您看到的边框之间有一些空格。你可以使用较小的字体,但你可能看起来很难看。另一件事是使用你自己的Button背景并摆脱默认的额外空间(默认的9补丁图像),所以最终的高度接近TextView
的文本高度。或者尝试使用固定值强制所有行的标准高度。
- 如何让按钮占据行的整个宽度?
醇>
我认为您在TextView
中有多个MessageRow
,所以当您添加Button
时,它会移到第一列(对应于第一个TextView
)。如果是这种情况,请在代表Button
中TextViews
的数量的列数中设置MessageRow
span :
TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
params.span = 3; // if you have 3 `TextView` in the MessageRow
Button bt = new Button(getContext());
bt.setText("Column1");
mHeader.addView(bt, params);
如果不是这样,请添加更多详细信息。
- 如何使行填充屏幕宽度? (MATCH_PARENT不这样做)
醇>
正如我之前提到的一个问题,我不知道为什么会这样(但我在那里给你一些解决方案来解决这个问题)。也:
mHeader
和其他MessageRow
是Tablelayout
的子项,而在其上使用的LayoutParams
是父项的LayoutParams
:TableLayout.LayoutParams
和不 TableRow.LayoutParams
。
您在TextView
中添加了一些MessageRow
(根据我之前提到的问题),将TableRow.LayoutParams
的子视图添加到MessageRow
。< / p>
您的代码中的WRAP_CONTENT
只使用LayoutParams
,您可能希望将宽度(构造函数中的第一个参数)设置为FILL_PARENT
/ {{ 1}}
- 如何在表格行之间画一条细线?
醇>
您可以使用一个简单的MATCH_PARENT
作为分隔符:
View
因为你有100行,你可以尝试设置一个带有分隔线的drawable作为for(int i = 0; i < 100; i++) {
MessageRow mr = new MessageRow(getContext());
// stuff to set the TexView text and color
mr.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
this.addView(mr);
View separator = new View(getContext());
separator.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, 3)));
separator.setBackgroundColor(Color.RED);
this.addView(separator);
}
(TableRow
和header
)的背景,而不是上面添加另一个的方法100布局视图。
额外注意:
您有很多观点要添加到单个活动布局中,您说的是100行,如果您的MessageRow
比简单的MessageRow
更复杂(我认为是这样)你可以遇到一些表演问题。我建议你看一下精彩的TextView
小部件。
答案 1 :(得分:1)
这里没有编程环境,但我会尝试回答你的一些问题。
标题行(按钮)高于基于测试的行的原因是因为按钮需要更多空间并且行容纳它。默认按钮在文本的顶部/底部都有填充。我认为您最好的选择是创建自己的按钮,这为您提供了控制外观和感觉的额外好处。似乎其他人之前遇到过这个问题:Can't get rid of bottom padding on button
你的按钮被设置为wrap_content,这意味着它不会比它需要的大(它会增长/缩小,所以它可以适合文本“Column1”或你放在那里的任何东西)。而不是制作Button WRAP,我怀疑你需要把它变成FILL_PARENT。
表格行不是需要填充屏幕宽度,而是需要填满屏幕的表格。无论您在何处定义表格,对于水平维度,可能设置为WRAP_CONTENT。将它设置为FILL_PARENT,你的表应该扩展到它的容器的整个宽度(在这种情况下,它应该扩展屏幕的整个宽度)
您可能有几种不同的方法可以做到这一点。我最近使用的一种方法是使用View标签,它基本上看起来就像屏幕上的水平条。以下是如何实现它的链接。 http://sonnygill.net/android/horizontal-rule/