Android TableView: заморозить строку заголовка, сохранив возможность прокрутки таблицы в обоих направлениях, а также сохранить вертикальную полосу прокрутки - PullRequest
0 голосов
/ 14 июля 2020

Я знаю, что здесь и в Google есть масса похожих вопросов, но я просто не мог найти правильный способ сделать это.

Допустим, я хочу отобразить TableView с заголовками. Таблица будет содержать динамические c строк и столбцов (т.е. недоступны во время сборки):

<TableLayout
    android:id="@+id/mytable"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:stretchColumns="*" />

Однако я хочу, чтобы она была прокручиваемой вниз, так как в ней может быть больше строк, чем дисплей может обработать один раз, поэтому я завернул его в Scrollview и поместил другое tableview впереди, чтобы содержать мои заголовки:

<TableLayout
    android:id="@+id/mytableheader" ... />

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollView_table"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scrollbars="vertical">

    <TableLayout
        android:id="@+id/mytable"... />
</ScrollView>

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

<HorizontalScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true"
    android:scrollbars="none"

    <TableLayout
        android:id="@+id/mytableheader" ... />

    <ScrollView
        android:id="@+id/scrollView_table" ...>
    
        <TableLayout
            android:id="@+id/mytable" ... />
    </ScrollView>
</HorizontalScrollView>

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

Я хочу иметь полосу прокрутки ScrollView будет отображаться всегда при прокрутке вниз. Если столбцы шире, чем дисплей, и появляется HorizontalScrollView, полоса прокрутки ScrollView видна только в том случае, если я панорамирую по горизонтали до конца содержимого.

Я, очевидно, могу изменить два ScrollView, тогда вертикальная полоса прокрутки всегда видны при прокрутке вниз, но в этом случае я потерял функции таблицы заголовков: замораживание и горизонтальная прокрутка:

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true"
    android:scrollbars="none"

    <TableLayout
        android:id="@+id/mytableheader" ... />

    <HorizontalScrollView
        android:id="@+id/scrollView_table" ...>

        <TableLayout
            android:id="@+id/mytable" ... />
    </HorizontalScrollView>
</ScrollView>

Поэтому, идя еще дальше, я могу поместить таблицу заголовков перед ScrollView, тогда она получит снова завис, но он по-прежнему не прокручивается по горизонтали.

Теперь я могу обернуть его в другой HorizontalScrollView, но тогда я столкнусь с проблемой синхронизации между строками заголовка и данных, которые нужно перемещать вместе при прокрутке. Хотя есть некоторые решения для этой проблемы syn c, но мне любопытно, есть ли что-то более простое для всей этой ситуации?

Мне просто нужна таблица Dynami c, которая может прокручивать как X, так и Y направлением, сохраняя верхнюю строку заголовка постоянно видимой и показывая вертикальную полосу прокрутки при спуске, чтобы пользователь имел представление о том, сколько контента все еще доступно.

...