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?

Troj
źródło
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.

Bryan Denny
źródło
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>
krunal shah
źródło
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>
Avijit Karmakar
źródło
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.

Patrick Murphy
źródło
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>
Inżynieria umysłu
źródło
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.

Tulsi
źródło
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
źródło
-27

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

Alishan
źródło
4
Kontroluje to widoczność tylko pasków przewijania. Ale nie tworzy dla Ciebie widoku przewijania.
Botond Kopacz