16

There is the ScrollView that allows only vertical scrolling, and the HorizontalScrollView that allows only horizontal scrolling, but no class for both. This seems like a pretty gaping deficit in the Android UI. Any tricks to allow this?

farm ostrich
  • 5,881
  • 14
  • 55
  • 81
  • 2
    In many cases, anything needing that much space should not be using `ScrollView`/`HorizontalScrollView`. Those only work when the contents are still fairly modest in memory consumption. On the far other end of the spectrum, consider Google Maps -- that is not implemented using `ScrollView` or `HorizontalScrollView`, because we cannot hold maps for the entire planet in RAM at once. Think long and hard about what you're trying to have scroll, because it is quite possible that you will need to do something much more complex than use `ScrollView` and kin to work on a mobile device. – CommonsWare Apr 24 '11 at 15:44
  • My solution to that was to calculate which of the level's (this is a game) objects are onscreen, and only drawing those. The other solution was to use a frame view of parent's width/height and move the level's objects as events occur. The latter seems like it would require more processing, but probably less RAM. Do you have a recommendation? – farm ostrich Apr 24 '11 at 15:50
  • 1
    "My solution to that was to calculate which of the level's (this is a game) objects are onscreen, and only drawing those." -- I'm no game developer, but that sounds like you don't need `ScrollView` and kin, then, as you are handling it all yourself. Just watch for swipe events and redraw your level at that point. – CommonsWare Apr 24 '11 at 16:19

3 Answers3

29

Try this

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content">

    <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="wrap_content"
                  android:layout_height="fill_parent">

         <TableLayout
                  android:id="@+id/amortization"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content">

              <TableRow
                  android:background="#ffff00">
                  <TextView
                       android:text="@string/amortization_1"
                       android:padding="3dip"/>
                  <TextView
                       android:text="@string/amortization_2"
                       android:padding="3dip"/>
                  <TextView
                       android:text="@string/amortization_3"
                       android:padding="3dip"/>
                  <TextView
                       android:text="@string/amortization_4"
                       android:padding="3dip"/>
                  <TextView
                       android:text="@string/amortization_5"
                       android:padding="3dip"/>
                  <TextView
                       android:text="@string/amortization_6"
                       android:padding="3dip"/>
                  <TextView
                       android:text="@string/amortization_7"
                       android:padding="3dip"/> 
              </TableRow>
         </TableLayout>
    </HorizontalScrollView>
</ScrollView>
Chris Knight
  • 24,333
  • 24
  • 88
  • 134
Bipin Vayalu
  • 3,025
  • 2
  • 25
  • 39
2

An example with an ImageView:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView android:id="@+id/ScrollView02" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            xmlns:android="http://schemas.android.com/apk/res/android">
<HorizontalScrollView android:id="@+id/HorizontalScrollView01" 
                      android:layout_width="wrap_content" 
                      android:layout_height="wrap_content">
<ImageView android:id="@+id/ImageView01"
           android:src="@drawable/pic" 
           android:isScrollContainer="true" 
           android:layout_height="fill_parent" 
           android:layout_width="fill_parent" 
           android:adjustViewBounds="true">
</ImageView>
</HorizontalScrollView>
</ScrollView>

Source: http://www.android-spa.com/viewtopic.php?t=3959&highlight=scrollview+vertical+horizontal

Vicente Plata
  • 3,370
  • 1
  • 19
  • 26
1

I found it is important to set fillViewportbecause otherwise scroll bars might appear at random positions instead of at the right/bottom of the scrolling area:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true" >
    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true" >
    </HorizontalScrollView>
</ScrollView>
vsp
  • 919
  • 7
  • 14