如何使LinearLayout可滚动?


Answers:


459

将线性布局用 <ScrollView>

请参阅此处的示例:

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

注意:在API级别8和更高版本中,不建议使用fill_parent并将其重命名为match_parent


1
@DanielMagnusson链接仍可在此处使用...这是一个视频指南:youtube.com/watch
Bryan Denny

33
我认为您不需要外部LinearLayout。
劳伦斯·凯斯特洛

1
@Lawrence不,这不是必需的,但是可以取决于其余视图的外观。
Bryan Denny

1
如果顶部线性布局中只有Scrollview,则会收到警告“此ScrollView布局或其LinearLayout父级无用;将background属性转移到另一个视图”,这意味着仅包含一个项目的linearlayout毫无意义。
Niels

2
和一些重要的通知:ScrollView必须只有一个孩子
O-

145
<ScrollView 
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/scroll" 
      android:layout_width="match_parent"
      android:layout_height="wrap_content">

      <LinearLayout 
            android:id="@+id/container"
            android:orientation="vertical" 
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
      </LinearLayout>

 </ScrollView>

4

可以使用标记来完成<ScrollView>。对于ScrollView,您需要提醒一件事,ScrollView必须有一个孩子

如果要使整个布局可滚动<ScrollView>,请在顶部添加。检查下面给出的示例。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll" 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout 
        android:id="@+id/container" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
            <!-- Content here -->
    </LinearLayout>

</ScrollView>

但是,如果您希望布局的某些部分可滚动,请<ScrollView>在该部分中添加。检查下面给出的示例。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="400dp">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
                <!-- Content here -->
        </LinearLayout>

    </ScrollView>

</LinearLayout>

4

这是我通过反复试验做到的方法。

ScrollView - (the outer wrapper).

    LinearLayout (child-1).

        LinearLayout (child-1a).

        LinearLayout (child-1b).

由于ScrollView只能有一个子代,因此该子代是线性布局。然后,所有其他布局类型都出现在第一个线性布局中。我还没有尝试过包括相对布局,但是它们使我发疯,所以我将等到理智归来。


您能修复格式吗?您的第一行已从代码部分中遗漏了,该站点不会让我对其进行修复,因为它过于琐碎。
卡托

1

您需要使用以下属性并将其包含在线性布局中

<LinearLayout ...>
<scrollView ...> 

</scrollView>
</LinearLayout>

0

您需要将ScrollView放置为Layout文件的第一个子项,然后将您的linearlayout放入其中。现在,android将根据可用的内容和设备大小决定是否显示可滚动页面。

确保linearlayout没有同级,因为ScrollView不能有多个子级。


0
 <LinearLayout 
        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:orientation="vertical"
        tools:context=".MainActivity">

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                <---------Content Here --------------->
            </LinearLayout>
       </ScrollView>
    </LinearLayout>

-27

您可以在linearLayout中添加属性: android:scrollbars="vertical"


4
这仅控制滚动条的可见性。但这不会为您创建滚动视图。
Botond Kopacz,2015年
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.