Як зробити LinearLayout прокручуваним?


241

У мене багато елементів на екрані, і мені потрібно використовувати панель прокрутки, щоб користувач міг прокрутити вниз. Однак прокрутка або не видно, або не працює. Як можна додати смугу прокрутки до LinearLayout?


4
можливий дублікат того, як зробити прокрутку
LinearLayout

Відповіді:


459

Оберніть лінійний макет a <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 як першу дочірню частину файлу макета, а тепер покласти її лінійний проміжок всередину нього. Тепер андроїд вирішить, залежно від вмісту та розміру пристрою, показувати, чи потрібно прокручувати чи ні.

Переконайтесь, що в лінійному розкладі немає рідних братів, оскільки в 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
Це контролює лише видимість смуг прокрутки. Але це не створює прокрутки для вас.
Ботон Копач
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.