Meniul Android

Meniul Opțiuni

Meniul este răspuns de clasa android.view.Menu. Fiecare activitate este asociată cu un singur element de meniu. Meniul conține elemente de meniu (clasa android.view.MenuItem) și submeniu (clasa android.view.SubMenu).







Când meniul este deschis pentru prima dată, Android apelează metoda onCreateOptionsMenu (). trecerea obiectului Meniu ca parametru. Puteți crea un meniu ca resurse într-un fișier XML sau puteți folosi metoda add ().

În proiectul standard, atunci când selectați un șablon obișnuit, există deja un meniu pre-lucrare dintr-un element Setări și un apel de metodă pentru meniu (deja știți despre el).

Crearea de meniuri folosind resurse

Luați în considerare lucrul cu meniul prin resurse. Pentru a crea meniul, se utilizează resurse care trebuie stocate într-un fișier XML. Fișierul în sine ar trebui să fie în res / menu / folderul proiectului dvs. Meniul conține următoarele elemente:

Definește un meniu care va conține elemente de meniu. element trebuie să fie elementul rădăcină din structura fișierului XML și poate conține unul sau mai multe elemente și Creează direct elemente de meniu. Acest element poate avea un sub-element pentru a crea un submeniu Dacă doriți, puteți utiliza și un container invizibil pentru articole . Acest lucru vă permite să realizați anumite efecte

Să presupunem că am decis să folosim meniul pentru un joc. Creați un nou fișier game_menu.xml:

Am creat un meniu cu două elemente. Fiecare element include următoarele atribute:

android: id Identificatorul elementului de meniu pe care aplicația îl poate recunoaște când elementul de meniu este selectat de utilizatorul android: title Textul care va fi afișat în meniu

Există și alte atribute pentru elementul element. de exemplu, android: icon = "@ drawable / home" va afișa, de asemenea, pictograma pentru elementul de meniu, iar funcția android: enabled = "false" vă permite să faceți elementul de meniu inaccesibil.

Atributul android: titleCondensed este folosit dacă antetul normal este prea lat și nu se potrivește în elementul de meniu selectat.

Atributul android: orderInCategory specifică ordinea în care sunt afișate elementele de meniu MenuItems.

La crearea meniului, am indicat resursele de șir @ string / new_game și @ string / help. Este necesar să adăugați noi linii în fișierul strings.xml:

Acum trebuie să faceți modificări în clasa de activitate, în care va fi afișat meniul. Programul trebuie să convertească resursa de meniu creată de noi într-un obiect de program. În acest scop, există o metodă specială MenuInflater.inflate (). care este numit în metoda de apel invers special onCreateOptionsMenu (). Această metodă este utilizată pentru afișarea meniului când este apăsat butonul MENU de pe dispozitiv:

După introducerea codului, mediul de dezvoltare vă va cere să importați spațiile de nume lipsă.

Metoda onCreateOptionsMenu () inițiază prima apariție a meniului pe ecran și acceptă ca parametru obiectul Meniu (pentru dispozitive mai vechi). Puteți salva un link către meniu și îl puteți folosi oriunde în cod până când metoda onCreateOptionsMenu () este chemată din nou. Trebuie să utilizați întotdeauna implementarea acestui handler din clasa părinte, deoarece include în mod automat elemente suplimentare în meniu. În noile dispozitive, metoda este apelată când activitatea este creată. Metoda trebuie să se întoarcă la adevărat. astfel încât meniul să fie vizibil pe ecran.

După lansarea programului, apăsați butonul MENU de pe emulator pentru a vedea meniul creat.

Meniul Android

Metoda getMenuInflater () returnează o instanță a clasei MenuInflater. pe care le folosim pentru a citi datele din meniu din XML.

După cum puteți vedea, meniul apare în partea de jos a ecranului. În total, puteți afișa câte șase elemente de meniu simultan. Dacă există mai multe puncte, atunci vor fi afișate cinci puncte, plus al șaselea element Mai mult. care vă va permite să vedeți restul articolelor. Să verificăm și să adăugăm noi elemente de meniu.

Mai întâi adăugăm șase articole.

Meniul Android

Adăugați încă un element în meniu pentru al face șapte.

Meniul Android

Selectarea elementelor de meniu

Am învățat cum să creați un meniu. Dar în timp ce este inutil, deoarece elementele din meniu nu reacționează la presarea noastră. Pentru a procesa clicurile elementelor de meniu, utilizați metoda onOptionsItemSelected (). Metoda recunoaște elementul selectat de utilizator prin intermediul MenuItem. Acum putem defini elementul selectat apelând getItemId (). care returnează identificatorul elementului de meniu. Mai departe, prin intermediul instrucțiunii comutatorului, rămâne pentru noi să determinăm comenzile necesare:

Porniți aplicația, deschideți meniul și selectați primul sau al doilea element de meniu. În câmpul de text trebuie să apară un mesaj.







Meniul Android

În acest exemplu, getItemId () cere ID-ul elementului de meniu selectat și începe să se compare prin intermediul extrasului de selectare a tensiunii, cu un identificator pe care le-am stabilit în XML-resurse. Când se găsește identificatorul dorit, se execută manualul pentru elementul de meniu specificat. Dacă programul nu detectează nimic, operatorul implicit este executat. care returnează o clasă super.

În Android 3.0, puteți adăuga un atribut Android: resurse meniu onClick, și nu va trebui să utilizați onOptionsItemSelected (). Cu ajutorul Android: onClick, puteți specifica metoda dorită la selectarea unui element de meniu.

Crearea meniului software

Luați în considerare crearea unui meniu de software pentru exhaustivitate. Trebuie să definim mai multe constante pentru elementele de meniu:

Metoda add () are patru parametri:

  • identificator de grup - vă permite să asociați un element de meniu cu un grup de alte elemente din acest meniu
  • Elementul de identificare al elementului de gestionare a evenimentului pentru selectarea elementelor de meniu
  • comandați locația elementului în meniu - vă permite să determinați poziția din meniu. În mod prestabilit (Meniu.NONE sau 0), elementele merg în ordinea specificată în cod
  • header - textul care apare în elementul de meniu. Puteți utiliza o resursă de șir

Metoda returnează un obiect MenuItem. pe care le puteți utiliza pentru a seta proprietăți suplimentare, de exemplu pentru a seta pictograma, tasta rapidă etc.

Dacă doriți să creați un meniu cu pictograme, utilizați metoda setIcon ()

Amintiți-vă din nou că pictogramele pot fi adăugate numai la cele șase elemente de meniu (sau la cinci, dacă există mai mult de șase elemente).

Metoda onCreateOptionsMenu este apelată de sistem doar o singură dată când este creat meniul. Dacă trebuie să actualizați meniul în timp ce programul se execută, utilizați metoda onsprepareOptionsMenu () inversă.

Când selectați un element de meniu, se va apela metoda onOptionsItemSelected. care trece obiectul MenuItem - elementul de meniu selectat de utilizator. Utilizând metoda getItemId, puteți obține identificatorul elementului de meniu selectat. După identificarea elementului din meniu, puteți scrie codul pentru procesarea evenimentului de selectare a meniului:

Comenzi rapide

De asemenea, puteți seta taste rapide pentru acces rapid folosind simbolurile tastaturii, utilizând mai multe metode:

  • setAlphabeticShortcut (char) - adaugă un caracter
  • setNumericShortcut (int) - adaugă un număr
  • setShortcut (char, int) - adaugă o combinație între un caracter și un număr

De exemplu, dacă setați tasta rapidă setAlphabeticShortcut ('q');. atunci când deschideți meniul (sau în timp ce țineți apăsată tasta MENU), apăsând tasta Q veți selecta acest element din meniu. Această tastă rapidă (sau tasta de acces rapid) va fi afișată ca o sugestie care apare sub numele elementului de meniu. Noile tastaturi au o tastă Ctrl separată. care funcționează la fel ca pe tastaturile convenționale.

Tastele rapide pot fi create și prin XML: android: alphabeticShortcut = "c".

Puteți procesa clicurile utilizând metoda de activare onKeyShortcut ():

Crearea unui submeniu

Un submeniu poate fi adăugat în orice meniu, cu excepția altui submeniu. Un submeniu este creat în metoda onCreateOptionsMenu () callback folosind metoda addSubMenu (). care returnează un obiect SubMenu. În obiectul SubMenu, puteți adăuga elemente suplimentare în acest meniu utilizând metoda add (). De exemplu:

Acum, când selectați un element de meniu, va apărea o altă fereastră cu un submeniu. Încercați-l singur.

Adăugarea de steaguri și comutatoare

Este posibil să adăugați casete de selectare sau comutatoare la elementele de meniu. Pentru a adăuga o casetă de selectare sau o casetă de bifare pentru un element de meniu individual, trebuie să utilizați metoda setCe verificabil ():

Dacă trebuie să adăugați mai multe elemente de meniu cu casete de selectare sau comutatoare, le puteți combina în grupuri de meniuri prin crearea unui identificator separat. Elementul de meniu este adăugat la grup prin metoda add (). trecându-l ca primul parametru în identificatorul grupului de meniuri. Să presupunem că am declarat identificatorii pentru grupul de meniuri Culoare și elementele de meniu pentru setarea culorii:

Acum, pentru a crea un meniu cu grup de steaguri pentru a atribui un ID de grup pentru fiecare element de meniu și de apel setGroupCheckable () metoda pentru întregul grup (nu este nevoie de a provoca setCheckable () metoda pentru fiecare element de meniu):

Metoda setGroupCheckable () are trei parametri:

  • primul parametru este identificatorul grupului de meniuri;
  • al doilea parametru este valabil dacă comutatoarele sau steagurile sunt activate în grup;
  • al treilea parametru - setează singura (adevărată) sau mai multe (false) elemente de meniu. Acest parametru determină de fapt aspectul meniului - acesta va fi un meniu cu comutatoare sau steaguri.

Pentru a controla starea casetelor de selectare și comutatoarele din dispozitivul pentru selectarea evenimentului de meniu, scrieți următoarele:

Porniți proiectul, deschideți meniul și selectați elementul de meniu Culoare. Veți avea un submeniu cu trei elemente (roșu, verde, albastru) sub formă de steaguri. Starea casetelor de selectare și a comutatoarelor este procesată în codul programului și salvată atunci când sunt efectuate apeluri repetate în meniu.

Puteți aloca doar intenția elementului de meniu selectat prin setIntent () metoda care este declanșat atunci când apăsați acest punct, în cazul în care evenimentul nu a fost interceptat onMenuItemClickListener stivuitoare (caducă.) Or onOptionsItemSelected. După ce a lucrat, intenția este trecută la metoda startActivity.

Software-ul deschide sau închide meniul

Dacă din anumite motive trebuie să deschideți programatic meniul (de exemplu, în scopuri demonstrative), utilizați metoda openOptionsMenu ():

Pentru a închide meniul programabil, utilizați metoda closeOptionsMenu (). cu toate acestea, am apel din nou openOptionsMenu (), de asemenea, închide meniul.

Descărcarea software a elementului din meniu

Să presupunem că am definit un element de meniu într-un fișier xml:

Pentru a elimina elementul de meniu explicit inutil din programul nostru despre pisici, trebuie să accesați elementul de meniu prin metoda findItem () și să îl faceți invizibil. O legătură către obiectul Meniu trebuie să fie transmisă metodei onCreateOptionsMenu. astfel încât programul să învețe despre modificarea compoziției meniului.

Dar această soluție are un dezavantaj, dacă întoarcem ecranul, activitatea este recreată și meniul de la distanță va apărea din nou. Cum putem să scăpăm de câinele înăbușit?

Trebuie să vă amintiți starea elementului din meniu și să îl salvați într-un obiect Bundle în metoda onSaveInstanceState. și în metoda onCreate (), extrageți starea salvată și trimiteți-o la metoda onPrepareOptionsMenu. care este apelat înainte ca meniul să fie afișat pe ecran:

Determinați prezența butonului Meniu

Marcarea meniului

În dispozitivele moderne, meniul face parte din ActionBar. Și puteți personaliza aspectul meniului prin XML.

Să presupunem că ați ales această opțiune:

În atributul showAsAction, nu utilizați niciodată. altfel nu veți vedea marcajul. Marcajul în sine este specificat prin atributul actionLayout. Cod pentru marcare:

Meniu în fragmente

Meniul nu poate fi doar o parte a activității, ci și o parte a fragmentului. Principiul de funcționare este practic același. Fragmentul are o metodă adecvată.

FragmentManager este responsabil pentru a apela onCreateOptionsMenu () când activitatea de apel inversă onCreateOptionsMenu () este recepționată de la sistem. Trebuie să spuneți în mod explicit managerului FragmentManager. că fragmentul ar trebui să primească un apel peCreateOptionsMenu (). Pentru aceasta, metoda setHasOptionsMenu () se numește:







Articole similare

Trimiteți-le prietenilor: