我正在创建一个 Android 应用程序。此 Android 应用程序将具有动态对象。这些对象是具有地址或纬度/经度、与当前位置的距离以及预计到达时间的地点。我想做的是在TableLayout
带有边框的对象上添加对象,但我需要能够随着位置数量的增加而动态添加行。
我有点了解如何为 xml 上固定的硬编码项目数量执行此操作,但是当对象数量来自 Activity.java 文件时,最好的方法是什么?
下面是TableLayout
我想要的截图:
所以对象将是一个有地址、距离和方向的地方。
我正在创建一个 Android 应用程序。此 Android 应用程序将具有动态对象。这些对象是具有地址或纬度/经度、与当前位置的距离以及预计到达时间的地点。我想做的是在TableLayout
带有边框的对象上添加对象,但我需要能够随着位置数量的增加而动态添加行。
我有点了解如何为 xml 上固定的硬编码项目数量执行此操作,但是当对象数量来自 Activity.java 文件时,最好的方法是什么?
下面是TableLayout
我想要的截图:
所以对象将是一个有地址、距离和方向的地方。
但我需要能够随着地方数量的增加而动态添加行。
这并不难,当您有一个新对象将TableRow
带有数据的 a 附加到TableLayout
.
我有点了解如何为 xml 上固定的硬编码项目数量执行此操作,但是当对象数量来自 Activity.java 文件时,最好的方法是什么?
我认为没有最好的方法(或者你认为最好的方法)。你要么:
您的图像的一些示例:
(1)
private static final int DIVIDER_SIZE = 2;
// rowsCount the number of rows to add to the TableLayout
private void buildOldSchool(TableLayout table, int rowsCount) {
View divider;
for (int i = 0; i < rowsCount; i++) {
TableRow row = new TableRow(this);
for (int j = 0; j < 7; j++) {
if (j % 2 == 0) {
divider = new View(this);
divider.setLayoutParams(new TableLayout.LayoutParams(
DIVIDER_SIZE, TableLayout.LayoutParams.MATCH_PARENT));
divider.setBackgroundColor(Color.GREEN);
row.addView(divider, new TableRow.LayoutParams(
DIVIDER_SIZE, TableRow.LayoutParams.MATCH_PARENT));
continue;
}
TextView tv = new TextView(this);
tv.setText("DX"); // dummy data
row.addView(tv, new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT));
}
divider = new View(this);
divider.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT, DIVIDER_SIZE));
divider.setBackgroundColor(Color.GREEN);
if (i == 0) {
table.addView(divider);
divider = new View(this);
divider.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT, DIVIDER_SIZE));
divider.setBackgroundColor(Color.GREEN);
}
table.addView(row);
table.addView(divider);
}
}
(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);
}
}
图片在哪里:
R.drawable.cell
:
R.drawable.extra
(一个视觉透明的可绘制对象,复制了上面的九个补丁):
R.drawable.normalrow
:
R.drawable.firstrow
:
忽略我的设计技巧。
如果您预见到大量行,我建议您使用 a ListView
,您可以很容易地使它看起来像一个带边框的表格。
无法确定垂直线,但你可以建立一些东西
@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);
}