ConstrainLayout da ishlash - Mavzu: Android studioda ConstraintLayout. Reja: Android Studio haqida

|
Mavzu: Android studioda ConstraintLayout. Reja: Android Studio haqida
|
bet | 2/2 | Sana | 18.05.2024 | Hajmi | 0,79 Mb. | | #243194 |
Bog'liq androidConstrainLayout da ishlash
Mart oyida Google ConstraintLayout-ning reliz yangilanishini chiqardi. Biz uni ilgari Google I/o-da taqdim etdik.o'sha paytdan boshlab deyarli bir yil o'tdi, ConstraintLayout yaxshilandi, tezroq va yangi imkoniyatlarga ega bo'ldi. Masalan, zanjirdagi elementlarni birlashtirish imkoniyati paydo bo'lishi yoqimli-bu LinearLayout o'rniga ConstraintLayout-dan foydalanishga imkon beradi.
Loyiha qo’shish
Android Studio versiyasini 2.3 ga yangilang;
ConstraintLayout-ning so'nggi versiyasi o'rnatilganligini tekshiring-buni Android Studio → Settings(Preferences) → Appearance & Behavior → System Settings → Android SDK → SDK Tools → Support Repository-da ko'rish mumkin;
Dependency-ni build-ga qo'shing.gradle loyiha moduli:
Dependency-ni build-ga qo'shing.gradle loyiha moduli:
Endi siz o'zingizning loyihangizda Constraint Layout-dan foydalanishingiz mumkin:
Constraints. Biz elementlarni bir-biriga bog'laymiz
Constraints-bu ConstraintLayout ichida view joylashgan chiziqlar. Constraints Constraintlayoutning yon tomonlariga yoki ConstraintLayout ichidagi boshqa ko'rinishlarga bog'lanishi mumkin. Constraints vertikal va gorizontal qismlarga bo'linishi mumkin.
Gorizontal konstruktsiyalar:
o'ng tomon (o'ng), chap tomon (chap);
boshlang'ich tomoni (Start), oxirgi tomoni (End).
Vertikal konstruktsiyalar:
yuqori (yuqori), pastki (pastki);
asosiy chiziq (Bazeline).
Vertikal va gorizontal konstruktsiyalar bir-biri bilan bog'liq emas.
Eslatib o'taman, Bazeline-bu element tarkibini tekislash chizig'i. Misol-TextView uchun bu matn yozilgan chiziq chizig'i. Agar View-da baseline sonstraint o'rnatilgan bo'lsa, unda elementning asosiy chizig'i sonstraint bog'langan View-ning asosiy chizig'i darajasida bo'ladi.
Boshlash uchun, eng oson yo'li-sonstraints-ni ko'rish tomonlari sifatida ko'rib chiqish. Ya'ni, masalan, View b-ning chap tomonini view a-ning o'ng tomoniga bog'lab qo'yishingiz mumkin-keyin View B view a-ning o'ng tomonida joylashgan bo'ladi.
Sonstraint-ni bog'lash uchun umumiy atribut formati quyidagicha:
Qaerda:
X-sonstraint bog'langan ko'rinish;
Y-bog'langan ko'rish tomoni;
Agar siz ContraintLayout tomoniga bog'lashingiz kerak bo'lsa, z-id ko'rinishi yoki ota-ona.
Misol:
Tomonlarni bog'lashning asosiy qoidalari:
siz faqat Start va End, Left va Right, Top va Bottom-ni bir-biriga bog'lashingiz mumkin. Ya'ni, siz, masalan, Left-ni Start yoki Bazeline-ni Top-ga bog'lay olmaysiz;
Bazelinni faqat Bazeline bilan bog'lash mumkin boshqa ko'rinish;
Start/End bog'lanishida chap/o'ng bog'lanishlar e'tiborga olinmaydi;
Bazelinni bog'lashda Top / Bottom bog'lamalari e'tiborga olinmaydi;
ko'rinishni ConstraintLayout-ning tashqi tomoniga bog'lamang, masalan layout_constraintRight_toLeftOf="ota-ona". ConstraintLayout bunday bog'lanishni qayta ishlaydi, ammo u o'zini qanday tutishini oldindan aytish qiyin.
View o'lchamlarini o'rnating:
View o'lchamlarini belgilash uchun layout_width va layout_height majburiy atributlari va layout_constraintwidth_default va layout_constraintHeight_default ixtiyoriy atributlari ishlatiladi.
Layout_constraintwidth_default va layout_constraintHeight_default atributlarining standart qiymati spread.
Hajmi view quyidagicha ko'rsatilishi mumkin (balandlik misolida):
layout_height = "100dp" — fixed_size deb belgilang. Ko'rish belgilangan o'lchamda bo'ladi;
layout_height= "wrap_content" - any_size deb belgilang. Hajmi view o'zi tomonidan hisoblanadi, har qanday bo'lishi mumkin;
layout_height= "0dp" + layout_constraintHeight_default=" spread " — match_constraint_spread deb belgilang. View o'lchami constraints orasidagi masofaga teng bo'ladi. Masalan, balandlik uchun bu yuqori constraint va pastki constraint orasidagi masofa;
layout_height= "0dp" + layout_constraintHeight_default=" wrap " — match_constraint_wrap deb belgilang. Hajmi view-ning o'zi tomonidan hisoblab chiqilgan, ammo constraints-dan tashqariga chiqa olmaydi.
Muhim! Match_parent yoki fill_parent hajmini ko'rsatish taqiqlanadi. View o'lchamini ConstraintLayout o'lchamiga moslashtirish uchun constraints-ni ConstraintLayot tomonlariga bog'lash va match_constraint_spread o'lchamidan foydalanish kifoya.
Agar match_constraint_wrap yoki match_constraint_spread hajmi ko'rsatilgan bo'lsa, buni hisobga olish kerak:
ushbu turdagi o'lcham to'g'ri ishlashi uchun view ikkita constraint-ni bog'lashi kerak: kenglik uchun bu chap va o'ng yoki boshlash va tugatish. Balandlik uchun-Top va Bottom;
View hajmi constraints-dan tashqariga chiqa olmaydi;
constraints doirasida minimal va maksimal ko'rish hajmini belgilashingiz mumkin. Buning uchun layout_constraintwidth_min, layout_constrainttheight_min, layout_constraintWidth_max, layout_constrainttheight_max atributlaridan foydalaniladi;
Agar View Baseline constraint bilan bog'langan bo'lsa, balandlik uchun bunday o'lchamni o'rnatmasligingiz kerak — ehtimol elementning balandligi noto'g'ri hisoblanadi.
Boshqa turdagi o'lchamlar uchun buni hisobga olish kerak:
agar any_size yoki fixed_size ko'rsatilgan bo'lsa, unda element constraints doirasidan tashqariga chiqishi mumkin. Masalan, "Constraints" bo'limidagi misolda, agar siz view matnida uzun matnni o'rnatsangiz, u ConstraintLayout doirasidan tashqariga chiqadi;
ConstraintLayout o'lchamlariga fixed_size, any_size va match_constraint_wrap bilan view ta'sir qiladi. Agar Constraint Layout o'lchami noto'g'ri hisoblanganga o'xshasa, ehtimol bunday o'lchamdagi ko'rinishlardan biri aybdor
Tomonlarning nisbati asosida View o'lchamlarini o'rnating
Constraint Layout sizga berilgan tomonlar nisbati asosida ko'rish balandligi yoki kengligini hisoblash imkonini beradi. Ya'ni, masalan, tomonlar nisbati 16: 9 bo'lsa, agar balandlik 900dp bo'lsa, unda kenglik 1600dp sifatida hisoblanadi.
Layout_constraintdimensionratio atributi buning uchun javobgardir. Tomonlar nisbati ikki formatda o'rnatilishi mumkin: matn 16:9 yoki raqam 1.8. Bunday holda, qiymatdan oldin, nisbatning hisoblagichida joylashgan tomonning belgisini ko'rsatishingiz mumkin. Masalan, H, 16:9 16 balandlik (H) va 9 kenglik (W) ga mos keladigan qiymat ekanligini anglatadi.
Layout_constraintDimensionRatio-dagi qiymat, agar tomonlarning kamida bittasi match_constraint_wrap yoki match_constraint_spread-da ko'rsatilgan bo'lsa, View o'lchamlarini hisoblashda hisobga olinadi.
Constraint Layout ichida View ning nisbiy joylashuvini belgilang
Agar view ikkita gorizontal konstruktsiyani bog'lasa, u gorizontal nisbiy joylashuvni o'rnatishi mumkin. Xuddi shu narsa vertikal konstruktsiyalar uchun ham amal qiladi.
Layout_constrainthorizontal_bias atributi gorizontal joylashuvi uchun, layout_constraintvertical_bias vertikal joylashuvi uchun javobgardir. Nisbiy joylashuv 0 dan 1 gacha bo'lgan qiymat bilan ko'rsatilgan.
Bu asosan layout_gravity atributini yanada moslashuvchan almashtirishdir. Masalan, gorizontal joylashish uchun 0 chap tomonda, 0,5 markazda, 1 o'ng tomonda joylashgan joyni anglatadi. Odatiy bo'lib, 0.5.
Endi, masalan, 0.3 qiymatini o'rnating. Bu shuni anglatadiki, to'ldirilmagan joyning 30% view — ning chap tomonida va 70% o'ng tomonda bo'ladi. Agar View o'lchami constraints orasidagi masofa o'lchamidan katta bo'lsa, u holda constraints dan tashqariga chiqadigan o'lchamning 30% cheklovlarning chap tomonida, 70% esa o'ng tomonda bo'ladi.
Bir oz muhim eslatma: agar manifestda RTL tillari qo'llab — quvvatlansa, layout_constraintHorizontal_bias "chap" o'rniga "boshidan" va "o'ng" o'rniga "oxiridan"elementlarini joylashtiradi. Ya'ni, RTL tillarini qo'llab-quvvatlaydiganlar, "chap" va "o'ng" joylarini aniq belgilash natija bermasligini yodda tutishlari kerak. Hech bo'lmaganda men bunday imkoniyatni topa olmadim.
Misol:
Chiziqlarni bog'lash xususiyatlari
ConstraintLayout taqdimotidan so'ng u ko'pincha RelativeLayout bilan taqqoslandi. Ammo, aslida, ular elementlarning joylashishini tubdan farq qiladi. RelativeLayout — da view shunchaki boshqa view-ning qaysi tomonida bo'lishi kerakligini ko'rsatadi - "chap tomonda", "o'ng tomonda" va boshqalar.
Constraint joylashuvi uchun avval ushbu constraint biriktirilgan view joylashuvi hisoblanadi. Va View joylashuvi uchun avval u uchun ko'rsatilgan barcha konstruktsiyalar hisoblab chiqiladi. View va constraints siklik bog'liqliklari taqiqlangan, shuning uchun aslida ConstraintLayout ichida Constraints-ning view-ga va View-ning constraints-ga bog'liqliklarining yo'naltirilgan asiklik grafigi qurilgan. Barcha hisob-kitoblar grafaning mustaqil elementlaridan boshlab ketma-ket amalga oshiriladi.
Oddiylik uchun sizga vertikal va gorizontal bog'liqliklarni ikkita mustaqil guruhga bo'lishingizni maslahat beraman, go'yo ConstraintLayout ichida vertikal bog'liqliklar grafigi alohida va gorizontal chiziqlar alohida qurilgan.
Ammo, umuman olganda, vertikal ko'rish parametrlari bilvosita boshqa ko'rinishning gorizontal parametrlariga bog'liq bo'lishi mumkinligini tushunish kerak. Masalan, tomonlar nisbati asosida o'lchamni hisoblash: View kengligi o'zgarganda uning balandligi ham o'zgaradi. Ya'ni, agar gorizontal konstruktsiyalarning o'zgarishi tufayli View kengligi o'zgarsa, u holda View balandligi ham o'zgaradi.
|
| |