1. Mobil qurilmalar uchun dasturlar Ishlab chiqish muhiti


Mavzu: Boshqaruv menyu tugmachalari va klaviatura yordamida xaritalar



Download 27,79 Mb.
bet16/18
Sana24.09.2022
Hajmi27,79 Mb.
#850101
1   ...   10   11   12   13   14   15   16   17   18
Bog'liq
Amaliyot mobil qurulmalarni dasturlash

Mavzu: Boshqaruv menyu tugmachalari va klaviatura yordamida xaritalar
Reja:
1. Boshqaruv menyu tugmachalari
2. Klaviatura yordamida xaritalar
Menyular ko'p turdagi ilovalarda umumiy foydalanuvchi interfeysi komponentidir. Tanish va izchil foydalanuvchi tajribasini taqdim etish uchun siz MenuAPI-lardan foydalanuvchi harakatlari va faoliyatingizdagi boshqa variantlarni taqdim etish uchun foydalanishingiz kerak .
Android 3.0 (API darajasi 11) dan boshlab, Android-da ishlaydigan qurilmalar endi maxsus Menyu tugmachasini taqdim etishi shart emas . Ushbu o'zgarish bilan Android ilovalari an'anaviy 6 bandli menyu paneliga bog'liqlikdan voz kechishi va o'rniga foydalanuvchining umumiy harakatlarini ko'rsatish uchun ilovalar panelini taqdim etishi kerak.
Ba'zi menyu elementlari uchun dizayn va foydalanuvchi tajribasi o'zgargan bo'lsa-da, harakatlar va parametrlar to'plamini aniqlash uchun semantika hali ham MenuAPI-larga asoslangan . Ushbu qo'llanma Android-ning barcha versiyalarida uchta asosiy turdagi menyu yoki aksiya taqdimotlarini qanday yaratishni ko'rsatadi:
Variantlar menyusi va ilovalar paneli
Imkoniyatlari menyu faoliyat uchun menyu ob'ektlar asosiy to'plam. Bu yerda “Qidiruv”, “E-pochta yozish” va “Sozlamalar” kabi ilovaga global taʼsir koʻrsatadigan amallarni joylashtirishingiz kerak.
Tanlovlar menyusini yaratish bo'limiga qarang .
Kontekst menyusi va kontekstli harakat rejimi
Kontekst menyusi - foydalanuvchi elementni uzoq vaqt davomida bosganda paydo bo'ladigan suzuvchi menyu . U tanlangan tarkibga yoki kontekst ramkasiga ta'sir qiluvchi amallarni ta'minlaydi.
Kontekstual harakat rejimi ekranning yuqorisida bir satrida tanlangan mazmunini ta'sir va foydalanuvchi bir necha ma'lumotlar tanlash imkonini beradi ko'rsatadi harakat mahsulot.
Kontekst menyularini yaratish bo'limiga qarang .
Qalqib chiquvchi menyu
Qalqib chiquvchi menyu menyuni chaqirgan ko'rinishga bog'langan vertikal ro'yxatdagi elementlar ro'yxatini ko'rsatadi. Muayyan kontent bilan bog'liq harakatlar to'plamini ta'minlash yoki buyruqning ikkinchi qismi uchun variantlarni taqdim etish uchun yaxshi. Popup menyusida harakatlari kerak emas , to'g'ridan-to'g'ri mos mazmunini, ya'ni kontekstual harakatlar uchun nima ning ta'sir qiladi. Aksincha, qalqib chiquvchi menyu faoliyatingizdagi kontent hududlari bilan bog'liq kengaytirilgan harakatlar uchun mo'ljallangan.
Qalqib chiquvchi menyu yaratish bo'limiga qarang .
XMLda menyuni belgilash
Barcha menyu turlari uchun Android menyu bandlarini aniqlash uchun standart XML formatini taqdim etadi. Faoliyatingiz kodida menyu yaratish o'rniga, XML menyu resursida menyu va uning barcha elementlarini belgilashingiz kerak . Keyin menyu resursini (uni Menuob'ekt sifatida yuklash ) faoliyatingiz yoki fragmentingizda to'ldirishingiz mumkin.
Menyu manbasidan foydalanish bir necha sabablarga ko'ra yaxshi amaliyotdir:
XMLda menyu tuzilishini tasavvur qilish osonroq.
U menyu uchun tarkibni ilovangizning xatti-harakatlar kodidan ajratib turadi.
U turli platforma versiyalari, ekran oʻlchamlari va boshqa konfiguratsiyalar uchun ilova resurslari ramkasidan foydalanish orqali muqobil menyu konfiguratsiyalarini yaratishga imkon beradi .
Menyuni aniqlash uchun loyihangiz res/menu/ katalogida XML fayl yarating va menyuni quyidagi elementlar bilan tuzing:

MenuMenyu elementlari uchun konteyner bo'lgan ni belgilaydi . A element fayl uchun root tugun bo'lishi kerak va bir yoki ko'proq ushlab mumkin va elementlarni.

MenuItemMenyudagi bitta elementni ifodalovchi ni yaratadi . Ushbu element pastki menyu yaratish uchun o'rnatilgan elementni o'z ichiga olishi mumkin .

Elementlar uchun ixtiyoriy, ko'rinmas konteyner . Bu sizga menyu bandlarini toifalarga ajratish imkonini beradi, shunda ular faol holat va ko'rinish kabi xususiyatlarni baham ko'radi. Qo'shimcha ma'lumot olish uchun " Menyu guruhlarini yaratish " bo'limiga qarang .
Mana misol menyusi game_menu.xml:


android:icon="@drawable/ic_new_game"
android:title="@string/new_game"
android:showAsAction="ifRoom"/>
android:icon="@drawable/ic_help"
android:title="@string/help" />



Element Agar predmetlarning tashqi ko'rinishi va xatti aniqlash uchun foydalanishingiz mumkin bir necha sifatlari qo'llab-quvvatlaydi. Yuqoridagi menyudagi elementlar quyidagi atributlarni o'z ichiga oladi:
android:id
Elementga xos bo‘lgan resurs identifikatori, foydalanuvchi uni tanlaganida ilovaga uni tanib olish imkonini beradi.
android:icon
Buyum belgisi sifatida foydalanish uchun chizmaga havola.
android:title
Element nomi sifatida foydalanish uchun satrga havola.
android:showAsAction
Bu element qachon va qanday qilib ilova panelida amal elementi sifatida ko‘rinishini belgilaydi.
Bular siz ishlatishingiz kerak bo'lgan eng muhim atributlardir, ammo yana ko'p narsalar mavjud. Barcha qo'llab-quvvatlanadigan atributlar haqida ma'lumot olish uchun Menyu Resurs hujjatiga qarang .
Elementni  bolasi sifatida qo'shish orqali istalgan menyudagi elementga pastki menyu qo'shishingiz mumkin . Ilovangiz mavzularga ajratilishi mumkin bo'lgan ko'plab funktsiyalarga ega bo'lsa, kichik menyular foydali bo'ladi, masalan, shaxsiy kompyuter ilovasining menyu satridagi elementlar (Fayl, Tahrirlash, Ko'rish va h.k.). Masalan:


android:title="@string/file" >


android:title="@string/create_new" />
android:title="@string/open" />



Faoliyatingizda menyudan foydalanish uchun menyu manbasini (XML resursini dasturlashtiriladigan ob'ektga aylantirish) yordamida to'ldirishingiz kerak MenuInflater.inflate(). Keyingi bo'limlarda siz har bir menyu turi uchun menyuni qanday to'ldirishni ko'rasiz.


Variantlar menyusini yaratish

Rasm 1. Brauzerdagi Options menyusi.


Variantlar menyusi joriy faoliyat kontekstiga tegishli harakatlar va boshqa variantlarni, masalan, “Qidiruv”, “E-pochta yozish” va “Sozlamalar”ni o‘z ichiga olishi kerak bo‘lgan joydir.
Variantlar menyusidagi elementlarning ekranda paydo boʻlishi ilovangizni qaysi versiya uchun ishlab chiqqaningizga bogʻliq:
Agar siz ilovangizni Android 2.3.x (API 10 darajasi) yoki undan pastroq versiyalar uchun ishlab chiqqan bo'lsangiz , foydalanuvchi 1-rasmda ko'rsatilganidek , Menyu tugmasini bosganida variantlar menyusi mazmuni ekranning yuqori qismida paydo bo'ladi. birinchi ko'rinadigan qism - oltitagacha menyu bandini o'z ichiga olgan piktogramma menyusi. Agar sizning menyuingiz oltidan ortiq elementni o'z ichiga olsa, Android oltinchi bandni, qolganlarini esa foydalanuvchi " Ko'proq" ni tanlash orqali ochishi mumkin bo'lgan ortiqcha menyuga joylashtiradi .
Agar siz ilovangizni Android 3.0 (API 11-daraja) va undan yuqori versiyalar uchun ishlab chiqqan bo'lsangiz , variantlar menyusidagi elementlar ilovalar panelida mavjud. Odatiy bo'lib, tizim barcha elementlarni amallar to'lib ketishiga joylashtiradi, bu foydalanuvchi ularni ilovalar panelining o'ng tomonidagi harakatni to'ldirish belgisi bilan (yoki agar mavjud bo'lsa , qurilma Menyu tugmasini bosish orqali ) ko'rsatishi mumkin. Muhim harakatlarga tezkor kirishni yoqish uchun siz android:showAsAction="ifRoom"tegishli elementlarga qo'shish orqali ilovalar panelida paydo bo'ladigan bir nechta elementlarni targ'ib qilishingiz mumkin (2-rasmga qarang).
Harakatlar va ilovalar panelidagi boshqa xatti-harakatlar haqida ko'proq ma'lumot olish uchun Ilovalar panelini qo'shish bo'yicha trening sinfiga qarang.

Shakl 2. Google Sheets ilovasi, bir nechta tugmalar, jumladan, harakatni to'ldirish tugmasi.
Siz o'zingizning Activity kichik sinfingiz yoki kichik sinfingizdagi variantlar menyusi uchun narsalarni e'lon qilishingiz mumkin Fragment. Agar sizning faoliyatingiz ham, fragment(lar)ingiz ham variantlar menyusi uchun elementlarni e'lon qilsa, ular UIda birlashtiriladi. Har bir fragment faoliyatga qo'shilish tartibida birinchi navbatda faoliyat elementlari, keyin esa har bir fragmentning elementlari paydo bo'ladi. Agar kerak bo'lsa, android:orderInCategory har birida ko'chirishingiz kerak bo'lgan atribut bilan menyu elementlarini qayta buyurtma qilishingiz mumkin .
Faoliyat uchun variantlar menyusini belgilash uchun bekor qiling onCreateOptionsMenu()(fragmentlar o'zlarining onCreateOptionsMenu()qayta qo'ng'iroqlarini ta'minlaydi ). Ushbu usulda siz o'zingizning menyu manbangizni (XMLda belgilangan ) Menuqayta qo'ng'iroqda ko'rsatilganlarga to'ldirishingiz mumkin. Masalan:
KotlinJava
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val inflater: MenuInflater = menuInflater
inflater.inflate(R.menu.game_menu, menu)
return true
}

Bundan tashqari , API yordamida ularning xususiyatlarini qayta ko'rib chiqish add()uchun elementlardan foydalanib menyu elementlarini qo'shishingiz va ularni olishingiz mumkin .findItem()MenuItem


Agar siz ilovangizni Android 2.3.x va undan pastroq versiyalar uchun ishlab chiqqan bo'lsangiz onCreateOptionsMenu(), foydalanuvchi menyuni birinchi marta ochganda tizim parametrlar menyusini yaratishga chaqiradi . Agar siz Android 3.0 va undan yuqori versiyalar uchun ishlab chiqilgan bo'lsangiz, tizim onCreateOptionsMenu()ilovalar panelidagi elementlarni ko'rsatish uchun faoliyatni boshlaganda qo'ng'iroq qiladi .
Bosish hodisalarini boshqarish
Foydalanuvchi parametrlar menyusidan biror narsani tanlaganida (jumladan, ilova panelidagi amallar), tizim faoliyatingiz onOptionsItemSelected()usulini chaqiradi . Ushbu usul MenuItemtanlanganlardan o'tadi . Siz qo'ng'iroq qilib elementni aniqlashingiz mumkin getItemId(), bu menyu elementi uchun noyob identifikatorni qaytaradi ( android:idmenyu resursidagi atribut yoki add()usulga berilgan butun son bilan belgilanadi ). Tegishli amalni bajarish uchun ushbu identifikatorni maʼlum menyu bandlariga moslashtirishingiz mumkin. Masalan:
KotlinJava
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle item selection
return when (item.itemId) {
R.id.new_game -> {
newGame()
true
}
R.id.help -> {
showHelp()
true
}
else -> super.onOptionsItemSelected(item)
}
}

Menyu bandini muvaffaqiyatli bajarganingizda, ni qaytaring true. Agar siz menyu bandini ishlatmasangiz, superklassni amalga oshirishni chaqirishingiz kerak onOptionsItemSelected()(standart dastur noto'g'ri qaytariladi).


Agar faoliyatingiz fragmentlarni o'z ichiga olgan bo'lsa, tizim birinchi navbatda onOptionsItemSelected()faoliyatni, so'ngra har bir fragment uchun (har bir fragment qo'shilgan tartibda) bitta qaytib kelguncha trueyoki barcha fragmentlar chaqirilmaguncha chaqiradi .
Maslahat: Android 3.0 android:onClickatributdan foydalanib, XML menyusidagi menyu bandi uchun bosish harakatini aniqlash imkoniyatini qo'shadi . Atributning qiymati menyudan foydalangan holda faoliyat tomonidan aniqlangan usulning nomi bo'lishi kerak. Usul umumiy bo'lishi va bitta MenuItemparametrni qabul qilishi kerak - tizim ushbu usulni chaqirganda, u tanlangan menyu bandiga o'tadi. Qo'shimcha ma'lumot va misol uchun Menyu Resurs hujjatiga qarang .
Maslahat: Agar ilovangiz bir nechta faoliyatni o'z ichiga olsa va ularning ba'zilari bir xil variantlar menyusini taqdim etsa, onCreateOptionsMenu()va onOptionsItemSelected()usullaridan boshqa hech narsani amalga oshirmaydigan faoliyat yaratishni ko'rib chiqing . Keyin bir xil variantlar menyusini baham ko'rishi kerak bo'lgan har bir faoliyat uchun ushbu sinfni kengaytiring. Shunday qilib, siz menyu amallarini boshqarish uchun kodlar to'plamini boshqarishingiz mumkin va har bir avlod klassi menyu xatti-harakatlarini meros qilib oladi. Agar siz menyu elementlarini avlod amallaridan biriga qo'shmoqchi bo'lsangiz onCreateOptionsMenu(), ushbu faoliyatni bekor qiling . super.onCreateOptionsMenu(menu)Asl menyu elementlari yaratilishi uchun qo'ng'iroq qiling , so'ngra bilan yangi menyu elementlarini qo'shing menu.add(). Shuningdek, alohida menyu elementlari uchun super sinfning xatti-harakatlarini bekor qilishingiz mumkin.
Ishlash vaqtida menyu elementlarini o'zgartirish
Tizim qo'ng'iroq qilgandan so'ng onCreateOptionsMenu(), u Menusiz kiritgan nusxani saqlab qoladi va onCreateOptionsMenu() agar biron sababga ko'ra menyu bekor qilinmasa, qayta qo'ng'iroq qilmaydi . Biroq, siz onCreateOptionsMenu()faqat boshlang'ich menyu holatini yaratish uchun foydalanishingiz kerak va faoliyatning hayot aylanishi davomida o'zgartirishlar kiritmaslik kerak.
Faoliyatning hayotiy tsikli davomida sodir bo'lgan voqealar asosida variantlar menyusini o'zgartirmoqchi bo'lsangiz, buni onPrepareOptionsMenu()usulda qilishingiz mumkin . Ushbu usul sizga Menuob'ektni hozirda mavjud bo'lgan holda uzatadi, shuning uchun siz uni o'zgartirishingiz mumkin, masalan, elementlarni qo'shish, olib tashlash yoki o'chirish. (Fragmentlar onPrepareOptionsMenu()qayta qo'ng'iroqni ham ta'minlaydi .)
Android 2.3.x va undan pastroq versiyalarda onPrepareOptionsMenu()foydalanuvchi har safar variantlar menyusini ochganda ( Menyu tugmasini bosganida) tizim qo‘ng‘iroq qiladi .
Android 3.0 va undan yuqori versiyalarida, ilovalar panelida menyu bandlari taqdim etilganda variantlar menyusi har doim ochiq deb hisoblanadi. Voqea sodir bo'lganda va siz menyuni yangilashni xohlasangiz invalidateOptionsMenu(), tizimga qo'ng'iroq qilishni so'rash uchun qo'ng'iroq qilishingiz kerak onPrepareOptionsMenu().
Eslatma: Siz hech qachon opsiyalar menyusidagi elementlarni Viewhozirda diqqat markazida bo'lganingizga qarab o'zgartirmasligingiz kerak. Sensorli rejimda (foydalanuvchi trekbol yoki d-paddan foydalanmayotganda) ko‘rinishlar fokuslana olmaydi, shuning uchun siz hech qachon variantlar menyusidagi elementlarni o‘zgartirish uchun fokusdan foydalanmasligingiz kerak. Agar kontekstga sezgir bo'lgan menyu elementlarini taqdim qilmoqchi bo'lsangiz View, Kontekst menyusidan foydalaning .
Kontekst menyularini yaratish

Shakl 3. Suzuvchi kontekst menyusi (chapda) va kontekstli harakatlar paneli (o'ngda) skrinshotlari.


Kontekst menyusi foydalanuvchi interfeysidagi muayyan element yoki kontekst ramkasiga ta'sir qiluvchi amallarni taklif qiladi. Siz har qanday ko'rinish uchun kontekst menyusini taqdim etishingiz mumkin, lekin ular ko'pincha ListView, GridView, yoki boshqa ko'rinishlar to'plamidagi elementlar uchun ishlatiladi , ularda foydalanuvchi har bir element bo'yicha to'g'ridan-to'g'ri amallarni bajarishi mumkin.
Kontekstli harakatlarni taqdim etishning ikki yo'li mavjud:
A suzuvchi kontekst menyusida . Foydalanuvchi kontekst menyusini qo'llab-quvvatlashni e'lon qiladigan ko'rinishni uzoq vaqt davomida bosganida (bosib ushlab turing) menyu menyu elementlarining suzuvchi ro'yxati (muloqot oynasiga o'xshash) sifatida paydo bo'ladi. Foydalanuvchilar bir vaqtning o'zida bitta element ustida kontekstli amalni bajarishlari mumkin.
In kontekstual harakat rejimida . Ushbu rejim tanlangan element(lar)ga ta'sir qiluvchi amallar elementlari bilan ekranning yuqori qismida kontekstli harakatlar paneliniActionMode ko'rsatadigan tizimni amalga oshirishdir . Ushbu rejim faol bo'lsa, foydalanuvchilar bir vaqtning o'zida bir nechta elementlarda amalni bajarishlari mumkin (agar ilovangiz bunga ruxsat bersa).
Eslatma: Kontekstli harakatlar rejimi Android 3.0 (API 11-daraja) va undan yuqori versiyalarida mavjud va mavjud bo‘lganda kontekstli harakatlarni ko‘rsatish uchun afzal qilingan usul hisoblanadi. Agar ilovangiz 3.0 dan past versiyalarni qo‘llab-quvvatlasa, siz ushbu qurilmalarda suzuvchi kontekst menyusiga qaytishingiz kerak.
Suzuvchi kontekst menyusini yaratish
Suzuvchi kontekst menyusini taqdim qilish uchun:
Ro'yxatdan Viewchaqirilib kontekst menyu bog'liq bo'lishi kerak bo'lgan registerForContextMenu()va uni o'tishi View.
Sizning faoliyati foydalanadi bo'lsa ListViewyoki GridViewva har bir element, shu kontekst menyusi ta'minlash o'tib bilan kontekst menyusi uchun barcha ma'lumotlar ro'yxatdan istagan ListViewyoki GridViewuchun registerForContextMenu().
Amalga oshirish onCreateContextMenu()siz ham usuli Activityyoki Fragment.
Ro'yxatdan o'tgan ko'rinish uzoq bosish hodisasini qabul qilganda, tizim sizning onCreateContextMenu() usulingizni chaqiradi . Bu erda siz menyu elementlarini aniqlaysiz, odatda menyu manbasini to'ldirish orqali. Masalan:
KotlinJava
override fun onCreateContextMenu(menu: ContextMenu, v: View,
menuInfo: ContextMenu.ContextMenuInfo) {
super.onCreateContextMenu(menu, v, menuInfo)
val inflater: MenuInflater = menuInflater
inflater.inflate(R.menu.context_menu, menu)
}


MenuInflatermenyu resursdan kontekst menyusini şişirmek imkonini beradi . Qayta qo'ng'iroq qilish usuli parametrlari View foydalanuvchi tanlagan va ContextMenu.ContextMenuInfotanlangan element haqida qo'shimcha ma'lumot beruvchi ob'ektni o'z ichiga oladi . Agar sizning faoliyatingiz har biri boshqa kontekst menyusini taʼminlovchi bir nechta koʻrinishga ega boʻlsa, qaysi kontekst menyusini toʻldirishni aniqlash uchun ushbu parametrlardan foydalanishingiz mumkin.
Amalga oshirish onContextItemSelected().
Foydalanuvchi menyu elementini tanlaganda, tizim ushbu usulni chaqiradi, shuning uchun siz tegishli amalni bajarishingiz mumkin. Masalan:
KotlinJava
override fun onContextItemSelected(item: MenuItem): Boolean {
val info = item.menuInfo as AdapterView.AdapterContextMenuInfo
return when (item.itemId) {
R.id.edit -> {
editNote(info.id)
true
}
R.id.delete -> {
deleteNote(info.id)
true
}
else -> super.onContextItemSelected(item)
}
}


getItemId()Usul yordamida XML har bir menyu bandi yuklansin kerak tanlagan menyu uchun ID surishtiruv android:idhaqida bo'limda ko'rsatilganidek, bir xususiyati XML bir Menyu aniqlash .
Menyu bandini muvaffaqiyatli bajarganingizda, ni qaytaring true. Agar siz menyu bandini ishlatmasangiz, menyu elementini superklassga o'tkazishingiz kerak. Agar faoliyatingiz fragmentlarni o'z ichiga olgan bo'lsa, faoliyat birinchi navbatda ushbu qayta qo'ng'iroqni oladi. Ishlov berilmaganda yuqori sinfni chaqirish orqali tizim voqeani har bir fragmentdagi tegishli qayta qo'ng'iroq qilish usuliga birma-bir (har bir fragment qo'shilgan tartibda) trueyoki falseqaytarilgunga qadar uzatadi . ( ActivityVa android.app.Fragmentreturn uchun standart dastur false, shuning uchun ishlov berilmaganda har doim yuqori sinfni chaqirishingiz kerak.)
Kontekstli harakat rejimidan foydalanish
Kontekstli harakat rejimi - bu ActionModefoydalanuvchi o'zaro ta'sirini kontekstli harakatlarni bajarishga qaratilgan tizimni amalga oshirish . Agar foydalanuvchi elementni tanlash orqali ushbu rejimni yoqsa , foydalanuvchi joriy tanlangan element(lar)da bajarishi mumkin bo'lgan amallarni ko'rsatish uchun ekranning yuqori qismida kontekstli harakatlar paneli paydo bo'ladi. Ushbu rejim yoqilgan bo'lsa, foydalanuvchi bir nechta elementlarni tanlashi mumkin (agar siz ruxsat bersangiz), elementlarni tanlashni olib tashlashi va faoliyat ichida harakat qilishni davom ettirishi mumkin (siz ruxsat bermoqchi bo'lsangiz). Foydalanuvchi barcha elementlarni tanlashni bekor qilganda, BACK tugmasini bosganida yoki panelning chap tomonidagi Bajarildi amalini tanlaganda amallar rejimi o‘chiriladi va kontekstli harakatlar paneli yo‘qoladi .
Eslatma: Kontekstli harakatlar paneli ilova paneli bilan bog‘lanishi shart emas. Ular mustaqil ravishda ishlaydi, garchi kontekstli harakatlar paneli vizual ravishda ilova satri pozitsiyasidan o'tib ketadi.
Kontekstli harakatlarni ta'minlaydigan ko'rinishlar uchun odatda ikkita hodisadan birida (yoki ikkalasida) kontekstli harakat rejimini ishga tushirishingiz kerak:
Foydalanuvchi ko'rinishni uzoq vaqt davomida bosishni amalga oshiradi.
Foydalanuvchi ko'rinishda tasdiqlash qutisini yoki shunga o'xshash UI komponentini tanlaydi.
Ilovangiz kontekstli harakat rejimini qanday chaqirishi va har bir harakat uchun xatti-harakatni belgilashi dizayningizga bog'liq. Asosan ikkita dizayn mavjud:
Individual, o'zboshimchalik bilan qarashlar bo'yicha kontekstli harakatlar uchun.
a ListViewyoki dagi elementlar guruhlari boʻyicha ommaviy kontekstli harakatlar uchun GridView(foydalanuvchiga bir nechta elementlarni tanlash va ularning barchasida amalni bajarishga ruxsat berish).
Quyidagi bo'limlar har bir stsenariy uchun zarur bo'lgan sozlashni tavsiflaydi.
Shaxsiy ko'rinishlar uchun kontekstli harakat rejimini yoqish
Agar siz kontekstli harakat rejimini faqat foydalanuvchi ma'lum ko'rinishlarni tanlaganida chaqirmoqchi bo'lsangiz, quyidagilarni qilishingiz kerak:
ActionMode.CallbackInterfeysni amalga oshirish . Qayta qo'ng'iroq qilish usullarida siz kontekstli harakatlar paneli uchun amallarni belgilashingiz, harakat elementlaridagi bosish hodisalariga javob berishingiz va harakat rejimi uchun boshqa hayot tsikli hodisalarini boshqarishingiz mumkin.
Barni ko'rsatmoqchi startActionMode()bo'lganingizda qo'ng'iroq qiling (masalan, foydalanuvchi ko'rinishni uzoq vaqt bosganda).
Masalan:
ActionMode.CallbackInterfeysni amalga oshirish :
KotlinJava
private val actionModeCallback = object : ActionMode.Callback {
// Called when the action mode is created; startActionMode() was called
override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
// Inflate a menu resource providing context menu items
val inflater: MenuInflater = mode.menuInflater
inflater.inflate(R.menu.context_menu, menu)
return true
}

// Called each time the action mode is shown. Always called after onCreateActionMode, but


// may be called multiple times if the mode is invalidated.
override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
return false // Return false if nothing is done
}

// Called when the user selects a contextual menu item


override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
return when (item.itemId) {
R.id.menu_share -> {
shareCurrentItem()
mode.finish() // Action picked, so close the CAB
true
}
else -> false
}
}

// Called when the user exits the action mode


override fun onDestroyActionMode(mode: ActionMode) {
actionMode = null
}
}

E'tibor bering, bu voqea qayta qo'ng'iroqlari variantlar menyusi uchun qayta qo'ng'iroqlar bilan deyarli bir xil , faqat ularning har biri ActionModevoqea bilan bog'liq ob'ektni ham o'tkazadi. Siz ActionModeAPI-lardan CAB-ga turli xil o'zgarishlar kiritish uchun foydalanishingiz mumkin , masalan, sarlavha va subtitrni setTitle()va setSubtitle()(qancha element tanlanganligini ko'rsatish uchun foydali) bilan qayta ko'rib chiqish .


Bundan tashqari, yuqoridagi namuna actionModeo'zgaruvchini nullharakat rejimi yo'q qilinganda o'rnatishiga e'tibor bering. Keyingi bosqichda siz uning qanday ishga tushirilganini va a'zo o'zgaruvchisini faoliyatingiz yoki fragmentingizda saqlash qanchalik foydali bo'lishini ko'rasiz.
startActionMode()Tegishli hollarda kontekstli harakat rejimini yoqish uchun qo'ng'iroq qiling , masalan, sichqonchani uzoq bosishga javoban View:
KotlinJava
someView.setOnLongClickListener { view ->
// Called when the user long-clicks on someView
when (actionMode) {
null -> {
// Start the CAB using the ActionMode.Callback defined above
actionMode = activity?.startActionMode(actionModeCallback)
view.isSelected = true
true
}
else -> false
}
}

Siz qo'ng'iroq qilganingizda startActionMode(), tizim ActionModeyaratilganni qaytaradi . Buni aʼzo oʻzgaruvchisiga saqlash orqali siz boshqa hodisalarga javoban kontekstli harakatlar paneliga oʻzgartirishlar kiritishingiz mumkin. Yuqoridagi namunada, harakat rejimini boshlashdan oldin a'zo null ekanligini tekshirish orqali, agar u allaqachon faol bo'lsa ActionMode, ActionModenamuna qayta yaratilmasligini ta'minlash uchun ishlatiladi .


ListView yoki GridView-da kontekstli harakatlarning to'plamini yoqish
Agar sizda ListViewyoki GridView(yoki boshqa kengaytmada AbsListView) elementlar toʻplami boʻlsa va foydalanuvchilarga ommaviy harakatlarni bajarishga ruxsat berishni istasangiz, quyidagilarni qilishingiz kerak:
AbsListView.MultiChoiceModeListenerInterfeysni amalga oshiring va uni bilan ko'rish guruhi uchun o'rnating setMultiChoiceModeListener(). Tinglovchining qayta qo'ng'iroq qilish usullarida siz kontekstli harakatlar paneli uchun amallarni belgilashingiz, amallar elementlaridagi bosish hodisalariga javob berishingiz va ActionMode.Callbackinterfeysdan meros qolgan boshqa qo'ng'iroqlarni boshqarishingiz mumkin.
Argument setChoiceMode()bilan qo'ng'iroq qiling CHOICE_MODE_MULTIPLE_MODAL.
Masalan:
KotlinJava
val listView: ListView = getListView()
with(listView) {
choiceMode = ListView.CHOICE_MODE_MULTIPLE_MODAL
setMultiChoiceModeListener(object : AbsListView.MultiChoiceModeListener {
override fun onItemCheckedStateChanged(mode: ActionMode, position: Int,
id: Long, checked: Boolean) {
// Here you can do something when items are selected/de-selected,
// such as update the title in the CAB
}

override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {


// Respond to clicks on the actions in the CAB
return when (item.itemId) {
R.id.menu_delete -> {
deleteSelectedItems()
mode.finish() // Action picked, so close the CAB
true
}
else -> false
}
}

override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {


// Inflate the menu for the CAB
val menuInflater: MenuInflater = mode.menuInflater
menuInflater.inflate(R.menu.context, menu)
return true
}

override fun onDestroyActionMode(mode: ActionMode) {


// Here you can make any necessary updates to the activity when
// the CAB is removed. By default, selected items are deselected/unchecked.
}

override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {


// Here you can perform updates to the CAB due to
// an invalidate() request
return false
}
})
}
Bo'ldi shu. Endi foydalanuvchi uzoq vaqt bosish bilan elementni tanlaganida, tizim onCreateActionMode() usulni chaqiradi va belgilangan harakatlar bilan kontekstli harakatlar panelini ko'rsatadi. Kontekstli harakatlar paneli ko'rinadigan bo'lsa-da, foydalanuvchilar qo'shimcha elementlarni tanlashlari mumkin.
Kontekstli harakatlar umumiy harakatlar elementlarini taqdim etadigan ba'zi hollarda foydalanuvchilarga elementlarni tanlash imkonini beruvchi belgilash katakchasini yoki shunga o'xshash UI elementini qo'shishni xohlashingiz mumkin, chunki ular uzoq vaqt bosish xatti-harakatlarini aniqlay olmaydi. Agar foydalanuvchi belgilash katakchasini tanlagan bo'lsa, tegishli ro'yxat elementini bilan belgilangan holatga o'rnatish orqali kontekstli harakat rejimini chaqirishingiz mumkin setItemChecked().
Qalqib chiquvchi menyu yaratish
Gmail ilovasidagi qalqib chiquvchi menyu, yuqori o'ngdagi to'ldirish tugmasi bilan bog'langan.
A ga PopupMenubog'langan modal menyu View. Agar joy bo'lsa, langar ko'rinishi ostida yoki aks holda ko'rinishning tepasida ko'rinadi. Bu foydali:
Muayyan kontentga taalluqli harakatlar (masalan, Gmail elektron pochta sarlavhalari, 4-rasmda ko'rsatilgan) uchun ortiqcha uslubdagi menyuni taqdim etish .
Eslatma: Bu kontekst menyusi bilan bir xil emas, odatda tanlangan tarkibga ta'sir qiladigan harakatlar uchun . Tanlangan tarkibga ta'sir qiladigan harakatlar uchun kontekstli harakat rejimi yoki suzuvchi kontekst menyusidan foydalaning .
Buyruq jumlasining ikkinchi qismini taqdim etish (masalan, "Qo'shish" deb belgilangan tugma, turli xil "Qo'shish" opsiyalari bilan qalqib chiquvchi menyuni ishlab chiqaradi).
Shunga o'xshash ochiladigan menyuni taqdim etish Spinnerdoimiy tanlovni saqlamaydi.
Eslatma: PopupMenu API darajasi 11 va undan yuqori versiyalarda mavjud.
Agar siz menyuingizni XML-da belgilasangiz , qalqib chiquvchi menyuni qanday ko'rsatishingiz mumkin:
Bir misol PopupMenujoriy ariza oladi kurucusunda bilan Contextva Viewmenyu langar kerak bo'lgan.
Foydalaning MenuInflaterichiga menyu manba şişirmek uchun Menutomonidan sodir ob'ekt PopupMenu.getMenu().
Qo'ng'iroq qiling PopupMenu.show().
Misol uchun, bu erda android:onClickqalqib chiquvchi menyuni ko'rsatadigan atributli tugma mavjud :
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_overflow_holo_dark"
android:contentDescription="@string/descr_overflow_button"
android:onClick="showPopup" />

Keyin faoliyat qalqib chiquvchi menyuni quyidagicha ko'rsatishi mumkin:


KotlinJava
fun showPopup(v: View) {
val popup = PopupMenu(this, v)
val inflater: MenuInflater = popup.menuInflater
inflater.inflate(R.menu.actions, popup.menu)
popup.show() }

14 va undan yuqori API darajasida menyuni ochadigan ikkita qatorni birlashtira olasiz PopupMenu.inflate().


Foydalanuvchi biror narsani tanlaganda yoki menyu maydonidan tashqariga tegsa, menyu o'chiriladi. dan foydalanib, o'chirish hodisasini tinglashingiz mumkin PopupMenu.OnDismissListener.
Bosish hodisalarini boshqarish
Foydalanuvchi menyu bandini tanlaganida biror amalni bajarish uchun PopupMenu.OnMenuItemClickListenerinterfeysni amalga oshirishingiz va uni PopupMenutelefon orqali ro'yxatdan o'tkazishingiz kerak setOnMenuItemclickListener(). Foydalanuvchi elementni tanlaganida, tizim onMenuItemClick()interfeysingizda qayta qo'ng'iroqni chaqiradi .
Masalan:
KotlinJava
fun showMenu(v: View) {
PopupMenu(this, v).apply {
// MainActivity implements OnMenuItemClickListener
setOnMenuItemClickListener(this@MainActivity)
inflate(R.menu.actions)
show()
}
}

override fun onMenuItemClick(item: MenuItem): Boolean {


return when (item.itemId) {
R.id.archive -> {
archive(item)
true }
R.id.delete -> { delete(item) true }
else -> false }}

Download 27,79 Mb.

Do'stlaringiz bilan baham:
1   ...   10   11   12   13   14   15   16   17   18




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish