วิธีการตั้งค่าแอป RecyclerView: layoutManager =“” จาก XML?


167

วิธีการตั้งค่าRecyclerView layoutManager จาก XML?

    <android.support.v7.widget.RecyclerView
        app:layoutManager="???"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

ดูเอกสารประกอบ: recyclerview: layoutManager
dieter_h

1
@dieter_h คุณสามารถให้คำตอบกับตัวอย่าง GridLayoutManager ได้หรือไม่?
Ilya Gazman

4
app:layoutManager="android.support.v7.widget.GridLayoutManager"คุณสามารถใช้ คอนสตรัคกับสี่ข้อโต้แย้งจะใช้ ( Context, AttributeSet, int, int) ตามเอกสารนี้เป็นตัวสร้างที่ใช้เมื่อตัวจัดการโครงร่างถูกตั้งค่าใน XML โดย RecyclerView คุณลักษณะ layoutManager หากไม่ได้ระบุ spanCount ใน XML จะมีค่าเริ่มต้นเป็นคอลัมน์เดียว
thetonrifles

คำตอบ:


269

ในขณะที่คุณสามารถตรวจสอบในเอกสาร:

ชื่อคลาสของตัวLayout Managerที่จะใช้

ชั้นต้องขยายandroidx.recyclerview.widget.RecyclerViewView$LayoutManagerและมีตัวสร้างเริ่มต้นหรือตัวสร้างที่มีลายเซ็น(android.content.Context, android.util.AttributeSet, int, int)

หากชื่อเริ่มต้นด้วย'.'แอปพลิเคชันแพคเกจจะนำหน้า มิฉะนั้นหากชื่อมี a '.'ชื่อคลาสจะถือว่าเป็นชื่อคลาสแบบเต็ม อื่นแพคเกจมุมมองรีไซเคิล ( androidx.appcompat.widget) จะนำหน้า

ด้วยandroidxคุณสามารถใช้:

<androidx.recyclerview.widget.RecyclerView
     xmlns:app="http://schemas.android.com/apk/res-auto"
     app:layoutManager="androidx.recyclerview.widget.GridLayoutManager">

ด้วยไลบรารีการสนับสนุนคุณสามารถใช้:

<android.support.v7.widget.RecyclerView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:layoutManager="android.support.v7.widget.GridLayoutManager" >

นอกจากนี้คุณสามารถเพิ่มคุณสมบัติเหล่านี้:

  • android:orientation= "horizontal|vertical": ในการควบคุมทิศทางของ LayoutManager (เช่น: LinearLayoutManager)
  • app:spanCount: เพื่อกำหนดจำนวนคอลัมน์สำหรับ GridLayoutManager

ตัวอย่าง:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
    app:spanCount="2"
    ...>

หรือ:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
    android:orientation="vertical"
    ...>

คุณสามารถเพิ่มได้โดยใช้toolsเนมสเปซ (เช่นtools:orientationและtools:layoutManager) จากนั้นจะมีผลกับการแสดงตัวอย่าง IDE และคุณสามารถตั้งค่าเหล่านั้นในรหัสต่อไป


77
และคุณสามารถใช้android:orientationกับองค์ประกอบ RecyclerView เพื่อควบคุมการวางแนวของ LinearLayoutManager เช่น
androidguy

3
@Gabriele Mariotti ฉันตรวจสอบการติดตั้งและใช้การสะท้อนกลับ ไม่เป็นไรจากการแสดงที่ฉลาด?
Ahmad Fadli

4
มีคุณสมบัติเพิ่มเติมหรือไม่ในกรณีที่ฉันใช้ GridLayoutManager เป็นไปได้ไหมที่จะกำหนดจำนวนคอลัมน์ (spanCount)?
นักพัฒนา android

8
@androiddeveloper ใช่เช่นตั้งค่าเป็นสามคอลัมน์ให้ใช้แอพ: spanCount = "3"
jauser

2
คุณสามารถใช้tools:layoutManager, tools:spanCount(แม้ว่าการเติมข้อความอัตโนมัติจะไม่แสดง) และหากคุณไม่ต้องการแทนที่การตั้งค่า recyclerview ใด ๆ ของคุณ (หรือชอบการเขียนโปรแกรม)
mochadwi

88

ถ้าคุณต้องการใช้กับ LinearLayoutManager

<android.support.v7.widget.RecyclerView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:layoutManager="android.support.v7.widget.LinearLayoutManager" >

ที่เทียบเท่ากับ

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
mRecyclerView.setLayoutManager(mLayoutManager);

2
อะไรคือสิ่งที่คุณเพิ่มให้กับ Gabriele Mariotti?
Ilya Gazman

4
อธิบายสิ่งที่เทียบเท่ากับในรหัส แต่มีตัวอย่างอับเรณู LinearLayout
Mina Fawzy

7
@UdiOshi เพื่อให้เป็นแนวนอนคุณต้องเพิ่มandroid:orientation="horizontal"RecyclerView xml
rf43

7
androidx.recyclerview.widget.LinearLayoutManager สำหรับ androidX
frapeti

82

และฉันมาที่นี่เพื่อค้นหาandroidxเวอร์ชั่นแม้ว่าจะเป็นเรื่องง่ายที่จะเข้าใจ

LinearLayoutManager:

app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"

ตัวอย่าง:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>

GridLayoutManager:

app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"

ตัวอย่าง:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:spanCount="2"
    app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"/>

ดังที่คุณเห็นในตัวอย่างด้านบนคุณสามารถควบคุมการวางแนวจากภายในxmlโดยใช้

android:orientation="vertical"

และ

android:orientation="horizontal"

และเพื่อกำหนดจำนวนคอลัมน์สำหรับGridLayoutManagerโดยใช้

app:spanCount="2"

10
คุณสามารถตั้งค่า ของคอลัมน์เมื่อคุณใช้GridLayoutManagerโดยเพิ่มapp:spanCount="2"
Pratik Butani

วิธีการที่เข้ากันได้ในอนาคต
Abhinav Saxena

เหมือนกันที่นี่ ... Androidx กำลังจะออก🚀
Robin Hood

1
ขอบคุณฉันกำลังมองหาspanCountพบที่นี่ Thats ทำไม upvote คำตอบ :)
Jimit เทล

16

สิ่งที่พบบ่อยที่สุดที่ฉันใช้คือ:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" 
    tools:listitem="@layout/grid_item"
    android:orientation="vertical" app:spanCount="3"/>

และ:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
    tools:listitem="@layout/grid_item"
    android:orientation="vertical"/>

ขอแนะนำให้ตั้งค่าlistitemเพื่อให้คุณเห็นว่าสามารถดูภาพตัวอย่างในเครื่องมือแก้ไขเค้าโครงได้อย่างไร

หากคุณต้องการให้คำสั่งซื้อย้อนกลับ แต่ฉันคิดว่าคุณต้องทำในรหัสแทนและใช้ "เครื่องมือ" ใน XML หากคุณต้องการเห็นบางสิ่งบางอย่าง ...


ซึ่งเป็นappsและappnamespaces คุณได้ใช้ในรูปแบบ XML ข้างต้น เพราะฉันได้รับข้อผิดพลาดเวลาในการสร้างถ้าผมใช้Android resource linking failed - AAPT: error: attribute orientation app:orientation
Omkar

ขอบคุณ แต่ยังคงเป็นเนมสเปซที่ไม่ถูกต้อง มันควรจะเป็นสำหรับandroid orientationมันไม่ทำงานกับappเนมสเปซทุกอย่างที่สมบูรณ์แบบ
Omkar

@Omkar แก้ไขอีกครั้ง ขอโทษ Updated
นักพัฒนาซอฟต์แวร์ Android
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.