این کد لبه بخشی از دوره آموزشی Android Kotlin Fundamentals است. اگر به ترتیب روی کدها کار کنید، بیشترین ارزش را از این دوره خواهید گرفت. همه کدهای دوره در صفحه فرود کد لبه های کدهای Android Kotlin Fundamentals فهرست شده اند.
مقدمه
یکی از اصلیترین نقاط قوت RecyclerView
این است که به شما امکان میدهد از مدیران طرحبندی برای کنترل و اصلاح استراتژی طرحبندی خود استفاده کنید. یک LayoutManager
نحوه چیدمان موارد موجود در RecyclerView
را مدیریت می کند.
RecyclerView
با مدیران طرحبندی خارج از جعبه برای موارد استفاده رایج ارائه میشود. به عنوان مثال، می توانید از LinearLayout
برای لیست های افقی و عمودی یا GridLayout
برای شبکه ها استفاده کنید. برای موارد استفاده پیچیده تر، باید یک LayoutManager
سفارشی پیاده سازی کنید.
در این کد لبه، میآموزید که چگونه دادهها را با استفاده از طرحبندی شبکهای به جای فهرست، با استفاده از برنامه ردیاب خواب از کد لبه قبلی، نمایش دهید. (اگر اپلیکیشن نسخه کد قبلی را ندارید، می توانید کد شروع را برای این کد لبه دانلود کنید.)
آنچه از قبل باید بدانید
باید با:
- ساخت یک رابط کاربری پایه با استفاده از
Activity
،Fragments
وViews
- پیمایش بین قطعات و استفاده از
safeArgs
برای انتقال داده ها بین قطعات - مشاهده مدلها، مشاهده کارخانههای مدلسازی و تحولات
-
LiveData
و ناظران آنها - چگونه یک پایگاه داده
Room
ایجاد کنیم، یک DAO ایجاد کنیم و موجودیت ها را تعریف کنیم - نحوه استفاده از کوروتین ها برای وظایف پایگاه داده و سایر کارهای طولانی مدت
- نحوه پیاده سازی
RecyclerView
اولیه باAdapter
،ViewHolder
و طرح بندی آیتم - نحوه اجرای اتصال داده برای
RecyclerView
- نحوه ایجاد و استفاده از آداپتورهای اتصال برای تبدیل داده ها
چیزی که یاد خواهید گرفت
- نحوه استفاده از
LayoutManager
متفاوت برای تغییر نحوه نمایش داده های خود درRecyclerView
- چگونه یک طرح بندی شبکه ای برای داده های خواب خود ایجاد کنید
کاری که خواهی کرد
- بر اساس برنامه خواب ردیاب از کدهای قبلی در این سری ساخته شده است.
- لیست داده های خواب نمایش داده شده توسط
RecyclerView
در برنامه را با شبکه ای از داده های خواب جایگزین کنید.
برنامه ردیاب خواب دارای دو صفحه است که با قطعات نشان داده شده است، همانطور که در شکل زیر نشان داده شده است.
اولین صفحه نمایش داده شده در سمت چپ دارای دکمه هایی برای شروع و توقف ردیابی است. صفحه نمایش برخی از داده های خواب کاربر را نشان می دهد. دکمه Clear تمام داده هایی را که برنامه برای کاربر جمع آوری کرده است برای همیشه حذف می کند. صفحه دوم که در سمت راست نشان داده شده است، برای انتخاب رتبه بندی کیفیت خواب است.
این برنامه از معماری ساده شده با کنترلر رابط کاربری، مدل نمایش و LiveData
و پایگاه داده Room
برای تداوم داده های خواب استفاده می کند.
داده های خواب در یک RecyclerView
نمایش داده می شود. در این لبه کد، برنامه را برای استفاده از GridLayout
تغییر می دهید. صفحه نهایی مانند تصویر زیر خواهد بود.
در یک کد لبه قبلی، وقتی RecyclerView
را به fragment_sleep_tracker.xml
اضافه کردید، یک LinearLayoutManager
را بدون هیچ گونه سفارشیسازی اضافه کردید. این کد داده ها را به صورت یک لیست عمودی نمایش می دهد.
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
LinearLayoutManager
رایجترین و سادهترین مدیر طرحبندی برای RecyclerView
است و از قرار دادن افقی و عمودی نماهای فرزند پشتیبانی میکند. به عنوان مثال، می توانید از LinearLayoutManager
برای ایجاد چرخ فلک از تصاویر استفاده کنید که کاربر به صورت افقی اسکرول می کند.
طرح شبکه
یکی دیگر از موارد استفاده رایج نیاز به نمایش داده های زیادی به کاربر است که می توانید با استفاده از GridLayout
انجام دهید. همانطور که در زیر نشان داده شده است، GridLayoutManager
برای RecyclerView
داده ها را به عنوان یک شبکه قابل پیمایش قرار می دهد.
از منظر طراحی، GridLayout
برای لیست هایی که می توانند به عنوان نمادها یا تصاویر نمایش داده شوند، مانند لیست های داخل یک برنامه مرور عکس، بهترین است. در برنامه ردیاب خواب، می توانید هر شب خواب را به صورت شبکه ای از نمادهای بزرگ نشان دهید. این طراحی در یک نگاه به کاربر یک دید کلی از کیفیت خواب خود می دهد.
چگونه GridLayout موارد را چیدمان می کند
GridLayout
موارد را در شبکه ای از ردیف ها و ستون ها مرتب می کند. با فرض اسکرول عمودی، به طور پیشفرض، هر آیتم در یک ردیف یک «span» میگیرد. (در این حالت، یک دهانه معادل عرض یک ستون است.)
در دو مثال اول نشان داده شده در زیر، هر ردیف از سه دهانه تشکیل شده است. بهطور پیشفرض، GridLayoutManager
هر آیتم را در یک بازه تا زمانی که شما مشخص میکنید، قرار میدهد. وقتی به تعداد دهانه رسید، به خط بعدی میپیچد.
بهطور پیشفرض، هر آیتم یک دهانه را اشغال میکند، اما میتوانید با تعیین چند دهانه، یک مورد را وسیعتر کنید. برای مثال، آیتم بالایی در سمت راست ترین صفحه (نشان داده شده در زیر) سه دهانه را اشغال می کند.
در این کار، RecyclerView
را که در آخرین تمرین به پایان رساندید، می گیرید و آن را برای نمایش داده ها با استفاده از GridLayoutManager
به روز می کنید. میتوانید به استفاده از برنامه Sleep-Tracker از Codelab قبلی ادامه دهید، یا میتوانید برنامه RecyclerViewGridLayout-Starter را از GitHub دانلود کنید.
مرحله 1: LayoutManager را تغییر دهید
- در صورت نیاز، برنامه RecyclerViewGridLayout-Starter را برای این Codelab از GitHub دانلود کنید و پروژه را در Android Studio باز کنید.
- فایل طرح بندی
fragment_sleep_tracker.xml
را باز کنید. - مدیر layout را از تعریف
sleep_list
RecyclerView
حذف کنید.
کد برای حذف:
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager
-
SleepTrackerFragment.kt
را باز کنید. - در
OnCreateView()
درست قبل از عبارتreturn
، یکGridLayoutManager
عمودی جدید از بالا به پایین با 3 دهانه ایجاد کنید.
سازندهGridLayoutManager
تا چهار آرگومان می گیرد: یک زمینه، کهactivity
، تعداد دهانه ها (ستون ها، در طرح بندی عمودی پیش فرض)، یک جهت (پیش فرض عمودی است)، و اینکه آیا طرح بندی معکوس است (پیش فرضfalse
است).
val manager = GridLayoutManager(activity, 3)
- در زیر آن خط، به
RecyclerView
بگویید از اینGridLayoutManager
استفاده کند.RecyclerView
در شی binding است وsleepList
نامیده می شود. (بهfragment_sleep_tracker.xml
مراجعه کنید.)
binding.sleepList.layoutManager = manager
مرحله 2: چیدمان را تغییر دهید
طرحبندی فعلی در list_item_sleep_night.xml
دادهها را با استفاده از یک ردیف کامل در هر شب نمایش میدهد. در این مرحله، چیدمان آیتم مربعی فشرده تری را برای شبکه تعریف می کنید.
-
list_item_sleep_night.xml
باز کنید. -
sleep_length
TextView
را حذف کنید، زیرا طرح جدید به آن نیاز ندارد. -
quality_string
TextView
را طوری حرکت دهید که در زیرImageView
نمایش داده شود. برای انجام این کار، باید چندین مورد را به روز کنید. در اینجا طرح نهایی برایquality_string
TextView
است:
<TextView
android:id="@+id/quality_string"
android:layout_width="0dp"
android:layout_height="20dp"
android:textAlignment="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/quality_image"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/quality_image"
app:layout_constraintTop_toBottomOf="@+id/quality_image"
tools:text="Excellent!!!"
app:sleepQualityString="@{sleep}" />
- در نمای Design بررسی کنید که
quality_string
TextView
در زیرImageView
قرار دارد.
از آنجایی که از اتصال داده استفاده کردید، نیازی به تغییر چیزی در Adapter
ندارید. کد باید فقط کار کند و لیست شما باید به صورت شبکه نمایش داده شود.
- برنامه را اجرا کنید و نحوه نمایش داده های خواب را در یک شبکه مشاهده کنید.
توجه داشته باشید کهConstraintLayout
همچنان کل عرض را می گیرد.GridLayoutManager
به نمای شما یک عرض ثابت می دهد، بر اساس گستره آن.GridLayoutManager
تمام تلاش خود را می کند تا هنگام چیدمان شبکه، اضافه کردن فضای خالی یا برش موارد، تمام محدودیت ها را برآورده کند.
- در
SleepTrackerFragment
، در کدی کهGridLayoutManager
را ایجاد میکند، تعداد دهانههایGridLayoutManger
را به 1 تغییر دهید. برنامه را اجرا کنید و یک لیست دریافت میکنید.
val manager = GridLayoutManager(activity, 1)
- تعداد دهانه های
GridLayoutManager
را به 10 تغییر دهید و برنامه را اجرا کنید. توجه داشته باشید کهGridLayoutManager
10 مورد را در یک ردیف قرار می دهد، اما موارد اکنون بریده شده اند. - تعداد بازه را به 5 و جهت را به
GridLayoutManager.VERTICAL
تغییر دهید. برنامه را اجرا کنید و متوجه شوید که چگونه می توانید به صورت افقی حرکت کنید. برای اینکه این کار خوب به نظر برسد، به یک چیدمان متفاوت نیاز دارید.
val manager = GridLayoutManager(activity, 5, GridLayoutManager.HORIZONTAL, false)
- فراموش نکنید که تعداد دهانه را روی 3 و جهت را روی عمودی تنظیم کنید!
پروژه اندروید استودیو: RecyclerViewGridLayout
- مدیران Layout نحوه چیدمان موارد موجود در
RecyclerView
را مدیریت می کنند. -
RecyclerView
با مدیران طرحبندی خارج از جعبه برای موارد استفاده رایج مانندLinearLayout
برای لیستهای افقی و عمودی، وGridLayout
برای شبکهها ارائه میشود. - برای موارد استفاده پیچیده تر، یک
LayoutManager
سفارشی را پیاده سازی کنید. - از دیدگاه طراحی،
GridLayout
بهترین استفاده را برای لیستی از مواردی دارد که می توانند به عنوان نماد یا تصویر نمایش داده شوند. -
GridLayout
موارد را در شبکه ای از ردیف ها و ستون ها مرتب می کند. با فرض اسکرول عمودی، هر آیتم در یک ردیف چیزی را که "span" نامیده می شود، می گیرد. - میتوانید تعداد دهانههای یک مورد را سفارشی کنید و شبکههای جالبتری را بدون نیاز به مدیر طرحبندی سفارشی ایجاد کنید.
- یک طرح بندی آیتم برای یک آیتم در شبکه ایجاد کنید و مدیر چیدمان مرتب کردن آیتم ها را بر عهده می گیرد.
- میتوانید
LayoutManager
را برایRecyclerView
در فایل طرحبندی XML که حاوی عنصر<RecyclerView>
است، یا به صورت برنامهریزی تنظیم کنید.
دوره های بی ادبی:
مستندات توسعه دهنده اندروید:
این بخش، تکالیف احتمالی را برای دانشآموزانی که در این آزمایشگاه کد به عنوان بخشی از دورهای که توسط یک مربی هدایت میشود، فهرست میکند. این وظیفه مربی است که موارد زیر را انجام دهد:
- در صورت نیاز تکالیف را تعیین کنید.
- نحوه ارسال تکالیف را با دانش آموزان در میان بگذارید.
- تکالیف را درجه بندی کنید.
مربیان میتوانند از این پیشنهادات به اندازهای که میخواهند استفاده کنند، و باید با خیال راحت هر تکلیف دیگری را که فکر میکنند مناسب است به آنها اختصاص دهند.
اگر به تنهایی بر روی این کدها کار می کنید، از این تکالیف برای آزمایش دانش خود استفاده کنید.
یه این سوالات پاسخ دهید
سوال 1
کدام یک از موارد زیر توسط Android ارائه شده است؟ همه موارد اعمال شده را انتخاب کنید.
▢ LinearLayouManager
▢ GridLayoutManager
▢ CircularLayoutManager
▢ StaggeredGridLayoutManager
سوال 2
"span" چیست؟
▢ اندازه یک شبکه ایجاد شده توسط GridLayoutManager
.
▢ عرض یک ستون در شبکه.
▢ ابعاد یک آیتم در یک شبکه.
▢ تعداد ستون ها در یک شبکه که جهت عمودی دارد.
درس بعدی را شروع کنید: