Как сделать прокрутку LinearLayout?

241

У меня есть много элементов на экране, и мне нужно использовать полосу прокрутки, чтобы пользователь мог прокрутить вниз. Однако свиток либо не виден, либо не работает. Как можно добавить полосу прокрутки в LinearLayout?

Troj
источник
4
Возможный дубликат Как сделать прокрутку LinearLayout
Нарха

Ответы:

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>

Примечание: fill_parent устарел и переименован в match_parent в API уровня 8 и выше.

Брайан Денни
источник
1
@DanielMagnusson Link все еще работает здесь ... вот видео-руководство: youtube.com/watch?v=kNX996ZZ2CI
Брайан Денни
33
Я не думаю, что вам нужен внешний LinearLayout.
Лоуренс Кестулут
1
@Lawrence Нет, это не обязательно, но может зависеть от того, как выглядит остальная часть вашего взгляда.
Брайан Денни
1
Если у вас есть только Scrollview в верхнем линейном макете, вы получите предупреждение «Этот макет ScrollView или его родительский LinearLayout бесполезен; перенесите атрибут фона в другое представление», что означает, что бессмысленно иметь линейное макетирование только с одним элементом.
Нильс
2
и некоторые важные замечания: ScrollView должен иметь только 1 ребенка
O-9
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 может иметь только одного дочернего элемента, этот дочерний элемент является линейным макетом. Затем все остальные типы макетов появляются в первом линейном макете. Я еще не пытался включить относительную компоновку, но они сводят меня с ума, поэтому я буду ждать, пока вернется мое здравомыслие.

Патрик Мерфи
источник
Не могли бы вы исправить форматирование, пожалуйста. Ваша первая строка была пропущена из раздела кода, и сайт не позволит мне исправить это, поскольку редактирование слишком тривиально.
Caltor
1

вам нужно использовать следующий атрибут и заключить его в линейный макет

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

</scrollView>
</LinearLayout>
Инженерный разум
источник
0

Вам нужно поместить ScrollView в качестве первого потомка файла макета и теперь поместите в него линейный макет. Теперь, на основе содержимого и размера устройства, 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>
anksanu
источник
-27

Вы можете добавить атрибут в linearLayout: android:scrollbars="vertical"

Alishan
источник
4
Это контролирует видимость только полос прокрутки. Но это не создает прокрутки для вас.
Ботонд Копач