如何使布局在水平和垂直方向上滚动?


69

我正在使用TableLayout。对于此布局,我需要同时进行水平和垂直滚动。默认情况下,我能够在视图中进行垂直滚动,但是水平滚动不起作用。

我正在使用Android SDK 1.5 r3。我已经尝试过了android:scrollbars="horizontal"

我在一些论坛上读到,在纸杯蛋糕更新中,可以水平滚动。

如何使布局在两个方向上滚动?

Answers:


142

我能够找到一种实现两种滚动行为的简单方法。

这是它的xml:

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

    <HorizontalScrollView 
        android:layout_width="320px" android:layout_height="fill_parent">

        <TableLayout
            android:id="@+id/linlay" android:layout_width="320px"
            android:layout_height="fill_parent" android:stretchColumns="1"
            android:background="#000000"/>

    </HorizontalScrollView>

</ScrollView>

水平滚动进行得很好...但是没有可见的水平滚动条..我们怎么做..?
阿米特(Amit)2010年

4
警告:这可能是一个不好的做法。看到这个问题/答案:stackoverflow.com/questions/4490821/...
佩德罗洛雷罗

7
@PedroLoureiro实际上,在你发布的链接的问题指的是结合ScrollView使用ListView。这是因为其中ListView有大量的优化无法与周围环境完美配合ScorollView。此处发布的答案未使用ListView,因此链接的参数无关紧要。
David Wasser

粘性列和行有其他选择吗?带有粘滞视图的滚动不流畅
Aditi Parikh

1
我以为这是个好主意,但实际上不允许对角滚动–您一次只能滚动一个轴。.这有点不好
Maverick Meerkat 18-10-17

9

为时已晚,但我希望您的问题可以通过此代码得到快速解决。无需执行任何其他操作,只需将您的代码放在scrollview下面。

<HorizontalScrollView
        android:id="@+id/scrollView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent">

      <ScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            //xml code
      </ScrollView>
</HorizontalScrollView>

2

在这篇android垂直和水平Scrollview中,他们讨论了一个可能的解决方案,并引用:

马特·克拉克(Matt Clark)已基于Android来源构建了一个自定义视图,它似乎可以完美运行:http : //blog.gorges.us/2010/06/android-two-Dimension-scrollview

请注意,该页面中的类存在一个错误,该错误会计算视图的水平宽度。评论中有Manuel Hilty的修复程序:

解决方案:将第808行的语句替换为以下内容:

final int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(lp.leftMargin + lp.rightMargin, MeasureSpec.UNSPECIFIED);

1

用这个:

android:scrollbarAlwaysDrawHorizontalTrack="true"

例:

<Gallery android:id="@+id/gallery"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:scrollbarAlwaysDrawHorizontalTrack="true" />

1

由于其他解决方案已经过时,或者工作不佳或根本无法工作,因此,我修改了NestedScrollView,它是稳定,现代的,并且具有滚动视图中您所期望的一切。水平滚动除外。

这是仓库:https : //github.com/ultimate-deej/TwoWayNestedScrollView

NestedScrollView对于绝对必要的原始期望,我没有做任何更改,也没有“改进” 。该代码基于androidx.core:core:1.3.0,这是撰写本文时的最新稳定版本。

以下所有作品:

  • 滚动滚动(因为基本上是a NestedScrollView
  • 二维的边缘效果
  • 二维填充视口

0

您可以使用下面的代码来做到这一点

<HorizontalScrollView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                    <ScrollView
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent">
                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content">
                            
                        </LinearLayout>
                    </ScrollView>
    </HorizontalScrollView>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.