คุณจะเลื่อน LinearLayout ได้อย่างไร?


241

ฉันมีรายการมากมายบนหน้าจอและฉันต้องใช้แถบเลื่อนเพื่อให้ผู้ใช้สามารถเลื่อนลงได้ อย่างไรก็ตามการเลื่อนไม่ปรากฏให้เห็นหรือไม่ทำงาน เป็นไปได้อย่างไรที่จะเพิ่มแถบเลื่อนไปที่LinearLayout?


4
เป็นไปได้ที่ซ้ำกันของวิธีการเลื่อน LinearLayout
Narkha

คำตอบ:


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 ลิงก์ยังใช้งานได้ที่นี่ ... นี่คือวิดีโอคู่มือ: youtube.com/watch?v=kNX996ZZ2CI
Bryan Denny

33
ฉันไม่คิดว่าคุณต้องการ LinearLayout ด้านนอก
Lawrence Kesteloot

1
@ ลอเรนซ์ไม่มันไม่จำเป็น แต่ขึ้นอยู่กับว่ามุมมองส่วนที่เหลือของคุณเป็นอย่างไร
ไบรอัน Denny

1
หากคุณมี Scrollview ในหน้าต่างด้านบนคุณจะได้รับคำเตือน "รูปแบบ ScrollView นี้หรือพาเรนต์ LinearLayout ของมันไม่มีประโยชน์เลยถ่ายโอนแอตทริบิวต์พื้นหลังไปยังมุมมองอื่น" ซึ่งหมายความว่ามันไม่มีประโยชน์ที่จะมี linearlayout ด้วยรายการเดียว
Niels

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เป็นไฟล์ย่อยของไฟล์ 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
สิ่งนี้จะควบคุมการมองเห็นของแถบเลื่อนเท่านั้น แต่มันไม่ได้สร้าง scrollview ให้คุณ
Botond Kopacz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.