Android -- How to allow horizontal and vertical scrolling
Asked Answered
A

3

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?

Avesta answered 24/4, 2011 at 15:37 Comment(3)
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.Bawcock
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?Avesta
"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.Bawcock
D
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>
Debutant answered 24/4, 2011 at 16:7 Comment(8)
Translation on a FrameLayout is best, methinksAvesta
This works ok, but you can only scroll horizontal or vertical, at one time, and not diagonally. It feels unfinished, but easy to implement.Contraction
I have a large grid of numbers that I have to display and this works perfectly. While you can't scroll diagonally, it's not really that big of a deal in a situation like mine.Odessaodetta
I tried this, HorizontalScrollView working fine, But vertically not workingGate
@MohanRaj you need to handle vertical scrolling using touch event of scrollview.Debutant
@Bipin Vayalu Ok fine, What i am trying is any other way to handle the content reading page instead of webview. Let me try the what you said.Gate
@MohanRaj If it's webpage, it will automatically do both side scrolling. You don't need to do anything with webview.Debutant
@Bipin Yeah I agree, Just few hours ago i tested and understood, thank you for the review.Gate
A
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

Anschluss answered 24/4, 2011 at 15:40 Comment(2)
IMHO a screen that requires both scrolling is not comfortable at all (actually I think Vertical Scrolling is not a good idea) but it works.Anschluss
It's for a game with levels much bigger than the screen. Thanks guy.Avesta
N
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>
Naturism answered 16/12, 2012 at 15:55 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.