W jaki sposób można przewijać LinearLayout?


241

Mam wiele elementów na ekranie i muszę użyć paska przewijania, aby użytkownik mógł przewinąć w dół. Zwój jest jednak niewidoczny lub nie działa. Jak można dodać pasek przewijania do LinearLayout?


4
możliwy duplikat Jak przewijać
LinearLayout

Odpowiedzi:


459

Zawiń układ liniowy za pomocą <ScrollView>

Zobacz tutaj przykład:

 <?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>

Uwaga: fill_parent jest przestarzałe i zmienia nazwę na match_parent na poziomie API 8 i wyższym.


1
@DanielMagnusson Link nadal tu działa ... oto przewodnik wideo: youtube.com/watch?v=kNX996ZZ2CI
Bryan Denny

33
Nie sądzę, że potrzebujesz zewnętrznego LinearLayout.
Lawrence Kesteloot

1
@Lawrence Nie, nie jest to konieczne, ale może zależeć od tego, jak wygląda reszta widoku.
Bryan Denny

1
Jeśli masz tylko widok przewijania w górnym układzie liniowym, pojawi się ostrzeżenie „Ten układ ScrollView lub jego element nadrzędny LinearLayout jest bezużyteczny; przenieś atrybut tła do drugiego widoku”, co oznacza, że ​​nie ma sensu mieć układu liniowego z tylko jednym elementem.
Niels,

2
i ważne powiadomienie: ScrollView musi mieć tylko 1 dziecko
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

Można to zrobić za pomocą znacznika <ScrollView>. W przypadku ScrollView należy pamiętać, że ScrollView musi mieć jedno dziecko .

Jeśli chcesz, aby cały układ był przewijalny, dodaj go <ScrollView>u góry. Sprawdź przykład podany poniżej.

<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>

Ale jeśli chcesz przewijać część układu, dodaj <ScrollView>tę część. Sprawdź przykład podany poniżej.

<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

Oto jak to zrobiłem metodą prób i błędów.

ScrollView - (the outer wrapper).

    LinearLayout (child-1).

        LinearLayout (child-1a).

        LinearLayout (child-1b).

Ponieważ ScrollView może mieć tylko jedno dziecko, to dziecko jest układem liniowym. Następnie wszystkie pozostałe typy układów występują w pierwszym układzie liniowym. Nie próbowałem jeszcze dołączyć względnego układu, ale doprowadzają mnie do szału, więc poczekam, aż wrócę zdrowy rozsądek.


Czy możesz naprawić formatowanie, proszę. Twój pierwszy wiersz został pominięty w sekcji kodu, a strona nie pozwala mi go naprawić, ponieważ jest to zbyt trywialna edycja.
Caltor

1

musisz użyć następującego atrybutu i zawrzeć go w układzie liniowym

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

</scrollView>
</LinearLayout>

0

Musisz umieścić ScrollView jako pierwsze dziecko pliku układu, a teraz umieścić w nim liniowy układ. Teraz Android zdecyduje na podstawie dostępnej zawartości i rozmiaru urządzenia, czy wyświetlać przewijane, czy nie.

Upewnij się linearlayout ma rodzeństwo ponieważ Scrollview nie może mieć więcej niż jedno dziecko.


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

Możesz dodać atrybut w linearLayout: android:scrollbars="vertical"


4
Kontroluje to widoczność tylko pasków przewijania. Ale nie tworzy dla Ciebie widoku przewijania.
Botond Kopacz
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.