在Android应用程序中添加带边框的动态表格布局

在Android应用程序中添加带边框的动态表格布局,android,android-layout,border,tablelayout,Android,Android Layout,Border,Tablelayout,我正在创建一个Android应用程序。此Android应用程序将具有动态对象。这些对象是带有地址或Lat/Long、距离当前位置和ETA的位置。我想做的是在带有边框的TableLayout上添加对象,但我需要能够随着位置数量的增加动态添加行 我在某种程度上理解如何对xml上固定数量的硬编码项执行此操作,但是当对象的数量来自Activity.java文件时,最好的方法是什么 下面是表格布局的屏幕截图我想要: 因此,对象应该是一个有地址、距离和方向的地方。无法算出垂直线,但可以建立在上面 @Ove

我正在创建一个Android应用程序。此Android应用程序将具有动态对象。这些对象是带有地址或Lat/Long、距离当前位置和ETA的位置。我想做的是在带有边框的
TableLayout
上添加对象,但我需要能够随着位置数量的增加动态添加行

我在某种程度上理解如何对xml上固定数量的硬编码项执行此操作,但是当对象的数量来自Activity.java文件时,最好的方法是什么

下面是
表格布局的屏幕截图
我想要:


因此,对象应该是一个有地址、距离和方向的地方。

无法算出垂直线,但可以建立在上面

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ScrollView sv = new ScrollView(this);

    TableLayout ll=new TableLayout(this);
    HorizontalScrollView hsv = new HorizontalScrollView(this);

    for(int i=1;i<5;i++) {
        TableRow tbrow=new TableRow(this);

        for(int j=1;j<=3;j++) {
            TextView tv1=new TextView(this);
            tv1.setText("Element :"+ i + "" + j);
            tbrow.addView(tv1);                
        }
        ll.addView(tbrow);
        View v = new View(this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5);
        v.setLayoutParams(params);
        v.setBackgroundColor(getResources().getColor(android.R.color.white));
        ll.addView(v);
    }
    hsv.addView(ll);
    sv.addView(hsv);
    setContentView(sv);
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
ScrollView sv=新的ScrollView(此);
TableLayout ll=新的TableLayout(本);
HorizontalScrollView hsv=新的HorizontalScrollView(此);
对于(int i=1;i
但是我需要能够随着位置数量的增加动态添加行

这并不困难,当您有一个新对象时,可以将数据附加到
TableLayout

我在某种程度上理解如何对xml上固定数量的硬编码项执行此操作,但是当对象的数量来自Activity.java文件时,最好的方法是什么

我不认为有最好的方法(或者你认为最好的方法)。你也可以:

  • 插入假视图作为分隔符。这在视觉上更容易实现,但也会增加应用程序的内存消耗,如果行数很大,则会产生不良后果。(1)
  • 或者使用可绘制的背景来模拟边界(如九幅补丁图像)。这比插入其他视图更简单,但您需要更多的天赋才能使其看起来更好。(2)
您的图像的一些示例:

(1)

private static final int DIVIDER_SIZE=2;
//Row查找要添加到TableLayout的行数
私立void buildOldSchool(表布局表,int ROWSCONT){
视图分割器;
for(int i=0;i
(2)或带有图像:

private void buildWithDrawables(TableLayout table, int rowsCount) {
    for (int i = 0; i < rowsCount; i++) {
        TableRow row = new TableRow(this);
        row.setBackgroundResource(i == 0 ? R.drawable.firstrow
                : R.drawable.normalrow);
        for (int j = 0; j < 3; j++) {
            TextView tv = new TextView(this);
            tv.setBackgroundResource(j == 2 ? R.drawable.extra
                    : R.drawable.cell);
            tv.setText("DX");
            row.addView(tv, new TableRow.LayoutParams(
                    TableRow.LayoutParams.MATCH_PARENT,
                    TableRow.LayoutParams.WRAP_CONTENT));
        }
        table.addView(row);
    }
}
private void build取款表(TableLayout表,int rowsunt){
for(int i=0;i
其中图像为:

  • R.drawable.cell

  • R.drawable.extra
    (一种视觉上透明的可绘制图形,可复制上述九个补丁):

  • R.drawable.normalrow

  • R.drawable.firstrow

忽略我的设计技巧


如果您预见到大量的行,我建议您使用
列表视图
,您可以很容易地使其看起来像一个带边框的表。

这有点有效,但我有一个要迭代的对象列表。这正是我决定的。我创建了一个可绘制的xml来使用。
private void buildWithDrawables(TableLayout table, int rowsCount) {
    for (int i = 0; i < rowsCount; i++) {
        TableRow row = new TableRow(this);
        row.setBackgroundResource(i == 0 ? R.drawable.firstrow
                : R.drawable.normalrow);
        for (int j = 0; j < 3; j++) {
            TextView tv = new TextView(this);
            tv.setBackgroundResource(j == 2 ? R.drawable.extra
                    : R.drawable.cell);
            tv.setText("DX");
            row.addView(tv, new TableRow.LayoutParams(
                    TableRow.LayoutParams.MATCH_PARENT,
                    TableRow.LayoutParams.WRAP_CONTENT));
        }
        table.addView(row);
    }
}