Android让桌子看起来像我想要的

时间:2012-04-23 15:34:50

标签: android user-interface tablelayout tablerow

我有一点麻烦使桌子看起来像我打算。 这些是几个问题,但由于它们都是参考下面的图片和我提供的细节,我认为它们都应该在一个帖子中。

这是我到目前为止所取得的成就:

enter image description here

标题行包含一个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);

2 个答案:

答案 0 :(得分:2)

  
      
  1. 如何使标题行高度更像行?
  2.   

使用默认Button没什么可做的。 Button使用九个补丁图像,在按钮的文本和您看到的边框之间有一些空格。你可以使用较小的字体,但你可能看起来很难看。另一件事是使用你自己的Button背景并摆脱默认的额外空间(默认的9补丁图像),所以最终的高度接近TextView的文本高度。或者尝试使用固定值强制所有行的标准高度。

  
      
  1. 如何让按钮占据行的整个宽度?
  2.   

我认为您在TextView中有多个MessageRow,所以当您添加Button时,它会移到第一列(对应于第一个TextView)。如果是这种情况,请在代表ButtonTextViews的数量的列数中设置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);

如果不是这样,请添加更多详细信息。

  
      
  1. 如何使行填充屏幕宽度? (MATCH_PARENT不这样做)
  2.   

正如我之前提到的一个问题,我不知道为什么会这样(但我在那里给你一些解决方案来解决这个问题)。也:

  1. mHeader和其他MessageRowTablelayout的子项,而在其上使用的LayoutParams是父项的LayoutParamsTableLayout.LayoutParams TableRow.LayoutParams

  2. 您在TextView中添加了一些MessageRow(根据我之前提到的问题),将TableRow.LayoutParams的子视图添加到MessageRow。< / p>

  3. 您的代码中的WRAP_CONTENT只使用LayoutParams,您可能希望将宽度(构造函数中的第一个参数)设置为FILL_PARENT / {{ 1}}

  4.   
        
    1. 如何在表格行之间画一条细线?
    2.   

    您可以使用一个简单的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); } TableRowheader)的背景,而不是上面添加另一个的方法100布局视图。

    额外注意:

    您有很多观点要添加到单个活动布局中,您说的是100行,如果您的MessageRow比简单的MessageRow更复杂(我认为是这样)你可以遇到一些表演问题。我建议你看一下精彩的TextView小部件。

答案 1 :(得分:1)

这里没有编程环境,但我会尝试回答你的一些问题。

  1. 标题行(按钮)高于基于测试的行的原因是因为按钮需要更多空间并且行容纳它。默认按钮在文本的顶部/底部都有填充。我认为您最好的选择是创建自己的按钮,这为您提供了控制外观和感觉的额外好处。似乎其他人之前遇到过这个问题:Can't get rid of bottom padding on button

  2. 你的按钮被设置为wrap_content,这意味着它不会比它需要的大(它会增长/缩小,所以它可以适合文本“Column1”或你放在那里的任何东西)。而不是制作Button WRAP,我怀疑你需要把它变成FILL_PARENT。

  3. 表格行不是需要填充屏幕宽度,而是需要填满屏幕的表格。无论您在何处定义表格,对于水平维度,可能设置为WRAP_CONTENT。将它设置为FILL_PARENT,你的表应该扩展到它的容器的整个宽度(在这种情况下,它应该扩展屏幕的整个宽度)

  4. 您可能有几种不同的方法可以做到这一点。我最近使用的一种方法是使用View标签,它基本上看起来就像屏幕上的水平条。以下是如何实现它的链接。 http://sonnygill.net/android/horizontal-rule/