@relgames
Java Developer

Разработка под Android: нарисовать таблицу со скроллингом по вертикали и горизонтали?

Стоит задача: нарисовать таблицу на основании двумерного списка, таблица должна автоматически подстроиться под размер текста в ячейках. Таблица может не поместиться на экране, ее должно быть можно скроллировать по вертикали и горизонтали.


Пока получилось написать вот так (в цикле иду по колонкам, внутри каждой колонки в цикле иду по ячейкам):
LinearLayout table = new LinearLayout(this);
        table.setOrientation(LinearLayout.HORIZONTAL);

        for (LevelColumn level : statistics.levels) {
            LinearLayout column = new LinearLayout(this);
            column.setOrientation(LinearLayout.VERTICAL);

            TextView header = new TextView(this);
            header.setText(level.name);

            column.addView(header);

            for (Score score : level.scores) {
                TextView cell = new TextView(this);
                cell.setText(score.teamName);

                column.addView(cell);
            }

            table.addView(column);
        }


        TwoDScrollView scrollView = new TwoDScrollView(this);
        scrollView.addView(table);

        setContentView(scrollView);



TwoDScrollView нашел вот тут blog.gorges.us/wp-content/uploads/TwoDScrollView.java


В итоге таблица рисуется, скроллируется, но размер колонок не подстраивается под текст, вместо этого, колонки рисуются фиксированной ширины.


Так же не могу понять, как отцентрировать текст в ячейках по горизонтали.


Буду благодарен любым советам.
  • Вопрос задан
  • 8680 просмотров
Пригласить эксперта
Ответы на вопрос 2
doubt
@doubt
Возможно, это поможет:
LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
column.setLayoutParams(params);

Если не поможет, то для cell аналогично указать параметр wrap content.
Ответ написан
OlegTar
@OlegTar
программист .NET, Javascript, Perl
можно сделать свой кастомный вью и использовать канвас

Извините, но код привожу на c#
Использовать команды типа
Canvas.DrawLine(left, top, right, bottom, paint);

А чтобы узнать размеры текста, вот так:
Rect bounds = new Rect();
p.GetTextBounds (text, 0, text.Length, bounds);


где p - переменная типа Paint

Пример создания собственного Вью здесь Android: странное поведение Canvas (надо раскрыть ссылку "код")
и здесь habrahabr.ru/post/151492

Только скроллинг не делайте вручную, делайте через слушатель, а то будут глюки при ресайзе.
Если что обращайтесь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы