Intereting Posts
Java.lang.IllegalStateException: нет активности Обновление приложения для Android – как это сделать? Инициализация Android AudioRecord терпит неудачу каждый раз Как создать вид сетки Android Google Play, как виджет с изображениями разных размеров, загружаемыми динамически Android создает PDF-документ из веб-браузера с несколькими страницами Могу ли я создать шаблон кнопки Android? Установите ширину релятивирования на 1/3 ширины экрана? Не занимайтесь деятельностью – для чего? Android Data Binding @BindingConversion failure для int для строки Почему Android Studio удаляет и / или меняет ограничения layout_margin *? GPGS надежные сообщения, не доходящие до другого игрока Удаляются ли Android AlarmManagers после обновления приложения? Как сохранить бесплатную / оплачиваемую версию приложения отдельно в подрывной деятельности Кнопка предварительного одобрения на Android Android: OpenCV: imwrite всегда возвращает false и не записывает

Добавление динамического TableLayout с границами в Android-приложении

Я создаю приложение для Android. Это Android-приложение будет иметь объекты, которые являются динамическими. Этими объектами являются Места с адресом или Lat / Long и расстояние от текущего местоположения и ETA. То, что я хотел бы сделать, это добавить объекты в TableLayout с границами, но мне нужно иметь возможность динамически добавлять строки по мере увеличения количества мест.

Я несколько понимаю, как это сделать для фиксированного жестко заданного количества элементов в xml, но что было бы лучшим способом, когда количество объектов поступает из файла Activity.java?

Ниже приведен снимок экрана TableLayout я хотел бы:

Макет таблицы

Таким образом, объект будет местом с адресом, расстоянием и направлением.

Solutions Collecting From Web of "Добавление динамического TableLayout с границами в Android-приложении"

Но мне нужно динамически добавлять строки по мере увеличения количества мест.

Это не сложно, когда у вас есть новый объект, добавьте TableRow с данными в TableLayout .

Я несколько понимаю, как это сделать для фиксированного жестко заданного количества элементов в xml, но что было бы лучшим способом, когда количество объектов поступает из файла Activity.java?

Я не думаю, что есть лучший способ (или то, что вы считаете лучшим способом). Вы либо:

  • Вставьте поддельные представления, чтобы действовать как разделители. Это было бы легче реализовать визуально, но это также увеличит потребление памяти вашего приложения, с плохими последствиями, если количество строк велико. (1)
  • Или используйте drawables для фона для имитации границ (например, изображения с девятью патчами). Это было бы проще, чем вставлять дополнительные виды, но вам нужно немного больше талантов, чтобы они выглядели хорошо. (2)

Некоторые примеры для вашего изображения:

(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.extra выше):

  • R.drawable.normalrow :

  • R.drawable.firstrow :

Игнорируйте мои дизайнерские навыки.

Если вы предвидите большое количество строк, я бы посоветовал вам использовать 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); }