Search code examples
androidandroid-gridviewandroid-tablelayoutandroid-scrollview

Creating dynamic size, horizontal-scrolling table in android


I have been trying to make a table that has two static columns on the left and right (so they are visible at all times). The left layout contains labels and the right contains totals. The scroll view contains all of the main contents. There could be a total of 232 textview all the way down to 24. I read that GridView is optimal for memory, but not for creating a variable amount of columns and rows, will not scroll horizontally, and will wrap its own content to fit a width...I need new columns to just keep adding width. Is the gridview capable of being used in this way?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="counter.prebuild.CreateNewCourseCard">

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/left"
    android:id="@+id/cardLeft"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/right"
    android:id="@+id/cardRight"
    android:layout_alignParentBottom="true"
    android:layout_toRightOf="@+id/space2" />

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/minus"
    android:id="@+id/cardMinus"
    android:layout_alignParentBottom="true"
    android:layout_toLeftOf="@+id/cardSelectNum" />

<TextView
    android:layout_width="70dp"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="@string/score_num_tile"
    android:id="@+id/cardSelectNum"
    android:gravity="center_vertical|center_horizontal"
    android:layout_centerHorizontal="true"
    android:layout_alignTop="@+id/cardMinus"
    android:layout_alignParentBottom="true" />

<Space
    android:layout_width="35dp"
    android:layout_height="20dp"
    android:id="@+id/space4"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/up"
    android:id="@+id/cardUp"
    android:layout_alignParentBottom="true"
    android:layout_alignRight="@+id/space4"
    android:layout_alignEnd="@+id/space4" />

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/down"
    android:id="@+id/cardDown"
    android:layout_alignParentBottom="true"
    android:layout_toLeftOf="@+id/space5" />

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/plus"
    android:id="@+id/cardPlus"
    android:layout_alignParentBottom="true"
    android:layout_toRightOf="@+id/cardSelectNum" />

<Space
    android:layout_width="70dp"
    android:layout_height="20dp"
    android:id="@+id/space3"
    android:layout_alignParentBottom="true"
    android:layout_toLeftOf="@+id/cardDown" />

<Space
    android:layout_width="25dp"
    android:layout_height="30dp"
    android:id="@+id/space5"
    android:layout_alignParentBottom="true"
    android:layout_toLeftOf="@+id/cardUp" />

<Space
    android:layout_width="70dp"
    android:layout_height="20dp"
    android:id="@+id/space6"
    android:layout_alignParentBottom="true"
    android:layout_toRightOf="@+id/cardRight" />

<Space
    android:layout_width="25dp"
    android:layout_height="30dp"
    android:id="@+id/space2"
    android:layout_alignParentBottom="true"
    android:layout_toRightOf="@+id/cardLeft" />

<View
    android:layout_width="fill_parent"
    android:layout_height="2dp"
    android:id="@+id/imageView"
    android:contentDescription="@string/blue_bar"
    android:layout_marginBottom="2dp"
    android:layout_above="@+id/cardSelectNum"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:background="#ff3463ff" />

<LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_above="@+id/imageView"
    android:id="@+id/cardLeftLayout"
    android:paddingRight="2dp">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="LeftLayout"
        android:id="@+id/leftLayout" />
    </LinearLayout>



<LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_above="@+id/imageView"
    android:id="@+id/cardRightLayout"
    android:paddingLeft="2dp">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="RightLayout"
        android:id="@+id/rightlayout" />
    </LinearLayout>

<HorizontalScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/cardCenterLayout"
    android:layout_alignTop="@+id/cardLeftLayout"
    android:layout_above="@+id/imageView"
    android:layout_toLeftOf="@+id/cardRightLayout"
    android:layout_toRightOf="@+id/cardLeftLayout">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="ScrollView"
        android:id="@+id/scrollViewText" />
</HorizontalScrollView>


Solution

  • I just used the two-way-gridview and in the adapter set up a public function with this.notifyDataSetChanged(). It will work in a way that any other listview type view works except that it will not scroll horizontally without an external library.

    As for the static left and right columns, I just set up a separate layout with views that are similar to the ones that I am displaying in the gridview.