Полоса прокрутки для табличного представления

#android #android-tablelayout

#Android #android-tablelayout

Вопрос:

Я пытаюсь разместить полосу прокрутки (как вертикальную, так и горизонтальную) для макета таблицы.

Вот мой xml:

 <ScrollView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="40"
    android:fillViewport="true">

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true">

        <TableLayout
            android:id="@ id/prize_table"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:padding="10dp"
            android:shrinkColumns="*"
            android:stretchColumns="*" />
    </HorizontalScrollView>
</ScrollView>
  

Вот как я добавляю строку таблицы:

 // header
row = new TableRow(MainActivity.this);
row.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

tv = new TextView(MainActivity.this);
tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
tv.setTextSize(18);
tv.setPadding(0, 5, 0, 5);
tv.setText(R.string.prize_no);
row.addView(tv);

tv = new TextView(MainActivity.this);
tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
tv.setTextSize(18);
tv.setPadding(0, 5, 0, 5);
tv.setText(R.string.prize_name);
row.addView(tv);

layout.addView(row);

for (Prize prize : prizes) {
    row = new TableRow(MainActivity.this);
    row.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    tv = new TextView(MainActivity.this);
    tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    tv.setTextSize(18);
    tv.setPadding(0, 5, 0, 5);
    tv.setText(prize.getPrizeID());
    row.addView(tv);

    tv = new TextView(MainActivity.this);
    tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    tv.setTextSize(18);
    tv.setPadding(0, 5, 0, 5);
    tv.setText(prize.getPrizeName());
    row.addView(tv);

    layout.addView(row);
}
  

Но у меня есть некоторые проблемы с этим кодом

  1. Вертикальная полоса прокрутки не может совпадать с моим контентом, допустим, у меня 10 строк, но полоса прокрутки будет в 10 раз длиннее
  2. Горизонтальная полоса прокрутки отсутствует

Может кто-нибудь указать, какая проблема в моем коде? Заранее спасибо

Ответ №1:

После нескольких тестов я обнаружил, что проблема заключалась в

 android:shrinkColumns="*"
  

После удаления этого обе проблемы были исправлены
Надеюсь, это поможет другим людям с такой же проблемой.