Există trei tipuri de meniuri în Android: Popup, Contextual și Opțiuni.

Fiecare are un caz de utilizare specific și un cod care merge împreună cu acesta. Pentru a afla cum să le utilizați, citiți mai departe.

Fiecare meniu trebuie să aibă un fișier XML legat de acesta, care definește aspectul acestuia. Acestea sunt etichetele asociate cu opțiunea de meniu:

<menu> – Acesta este elementul container pentru meniul dvs. (similar cu LinearLayout)

<item> – Aceasta denotă un element și este cuibărit în interiorul etichetei de meniu. Rețineți că un element de element poate conține un <menu> element pentru a reprezenta un submeniu

<group> – Aceasta este utilizată pentru a semnifica o anumită proprietate sau caracteristică pentru câteva elemente de meniu (stare IE / vizibilitate)

ad-banner
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:actionProviderClass="http://schemas.android.com/tools">
    <item android:id="@+id/item1"
        android:icon="@drawable/ic_baseline_check_circle_24px"
        android:title="item1"
        app:showAsAction="always"
        />
    <item android:id="@+id/item2"
        android:icon="@drawable/ic_baseline_copyright_24px"
        android:title="item2"
        app:showAsAction="always"
        />
    <item android:id="@+id/item3"
        android:icon="@drawable/ic_baseline_favorite_24px"
        android:title="item3"
        app:showAsAction="always">
    </item>
</menu>
Un aspect simplu al meniului

După cum se arată în fragmentul de cod de mai sus, fiecare element de meniu are diferite atribute asociate acestuia. Voi detalia principalele aici, dar dacă doriți să vedeți ce mai puteți adăuga, mergeți Aici.

  • id – Acesta este un identificator unic pentru elementul din meniu. Puteți utiliza acest lucru pentru a vedea exact ce articol a făcut clic pe utilizator
  • pictogramă – Dacă doriți să afișați o pictogramă asociată cu acel element de meniu
  • titlu – Text care va fi afișat în meniul pentru acel element
  • showAsAction – Acest atribut trebuie utilizat numai atunci când se utilizează un meniu într-o activitate care utilizează un bara de aplicații(sau așa cum se face referire și la aceasta, bara de acțiune). Controlează când și cum ar trebui să apară acest element ca acțiune în bara de aplicații. Există cinci valori: întotdeauna, niciodată, ifRoom, withText și collapseActionView
android:showAsAction="always|never|ifRoom|withText|collapseActionView"

Voi detalia detaliile fiecărei valori în secțiunea următoare.

În plus, trebuie să adăugați la activitatea dvs. metoda meniului onCreate relevant.

//Options Menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

//Context Menu
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
                                ContextMenu.ContextMenuInfo menuInfo) {
  super.onCreateContextMenu(menu, v, menuInfo);
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.context, menu);
}
R.menu.id este id-ul meniului pe care l-ați creat

Meniu Opțiuni

Acest meniu se găsește, de obicei, în partea de sus a aplicației dvs. și în acesta ar trebui să plasați acțiuni care afectează aplicația în ansamblu. Acestea ar putea fi setările aplicației sau o casetă de căutare.

Folosind aspectul meniului de mai sus, avem următorul meniu cu opțiuni:

Introducere in meniurile Android

După cum am promis, să trecem peste valorile care pot fi date pentru atributul showAsAction:

  • întotdeauna – se va afișa întotdeauna în bara de acțiune
  • niciodată – nu se va afișa niciodată și, prin urmare, va fi disponibil prin intermediul meniu overflow
  • ifRoom – numai dacă există suficient spațiu în bara de acțiune, atunci ar fi afișat. Rețineți că, conform documentației, există o limită la numărul de pictograme pe care le puteți avea pe bara de acțiuni.
  • withText-va include titlul elementului în bara de acțiuni
  • collapseActionView – dacă acest element are asociată o vizualizare de acțiune, acesta va deveni pliabil (de la API 14 și mai sus)

Dacă mergem mai departe și schimbăm ultimul element din meniul nostru la showAsAction = ”niciodată”, obținem următoarele:

Imagine pentru postare
Cel de-al treilea element de meniu sa mutat în meniul de depășire

Meniu contextual

Acest meniu apare atunci când un utilizator efectuează un clic lung pe unul dintre elementele dvs. de interfață. Opțiunile găsite în acest meniu afectează elementul de interfață pe care utilizatorul a făcut clic. Este obișnuit să utilizați acest tip de meniu în vizualizări de listă sau grilă, unde interacțiunea utilizatorului cu fiecare element poate duce la o acțiune specifică.

Imaginați-vă un scenariu în care aveți o aplicație cu o imagine și doriți să prezentați utilizatorului mai multe opțiuni atunci când face clic pe imagine.

Un meniu contextual poate apărea în două moduri:

  1. Un meniu plutitor
  2. O bară de acțiune în partea de sus a aplicației

Vom demonstra doar cum să utilizați prima opțiune, dar puteți citi mai multe despre a doua opțiune Aici.

Folosind următorul XML:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/share"
        android:title="Share"/>
    <item
        android:id="@+id/Mail"
        android:title="Mail"/>
    <item
        android:id="@+id/MoreInfo"
        android:title="More Information"/>
</menu>
Aspectul pentru meniul nostru contextual

Și adăugând următorul cod la activitatea noastră principală:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       TYPE_OF_LAYOUT layout = (TYPE_OF_LAYOUT)findViewById(R.id.main_layout);
       registerForContextMenu(layout);
  }
Codul necesar pentru a activa meniul contextual pentru aspectul activității noastre principale

Vom primi următoarele:

Introducere in meniurile Android
Când efectuați un clic lung pe text, apare meniul contextual

Un meniu pop-up este un tip de meniu care afișează elemente într-o listă verticală. Această listă este atașată la vizualizarea pe care a făcut clic utilizatorul pentru a invoca acest meniu. Este important să rețineți că, atunci când alegeți un meniu pop-up, nu doriți ca alegerea utilizatorului să afecteze conținutul anterior pe care l-a apăsat utilizatorul.

Vom folosi același aspect XML de meniu ca înainte, dar va trebui să adăugăm următorul cod la activitatea noastră:

void showPopupMenu(View view) {
  PopupMenu popup = new PopupMenu(this, view);
  MenuInflater inflater = popup.getMenuInflater();
  inflater.inflate(R.menu.actions, popup.getMenu());
  popup.show();
}
Metoda showPopupMenu trebuie apelată atunci când se produce un clic

Vom obține același rezultat ca și captura de ecran anterioară, dar fără a fi nevoie ca utilizatorul să efectueze un clic lung.

Icoane din meniurile pop-up

Acum știu pentru ce sunteți probabil aici: doriți să știți cum puteți adăuga pictograme la meniuri.

În timp ce voi arăta un exemplu despre cum să faceți acest lucru, este înțelept să înțelegeți că aceasta este o caracteristică care nu este activată pentru meniurile popup și poate provoca un comportament neașteptat. Puteți realiza acest lucru folosind reflexia pentru a activa un steag numit setForceShowIcon.

//popup is an instance of PopupMenu

try {
      Field[] fields = popup.getClass().getDeclaredFields();
      for (Field field : fields) {
          if ("mPopup".equals(field.getName())) {
              field.setAccessible(true);
              Object menuPopupHelper = field.get(popup);
              Class<?> classPopupHelper = Class.forName(menuPopupHelper
                      .getClass().getName());
              Method setForceIcons = classPopupHelper.getMethod(
                      "setForceShowIcon", boolean.class);
              setForceIcons.invoke(menuPopupHelper, true);
              break;
          }
      }
  } catch (Throwable e) {
      e.printStackTrace();
  }
1612130106 194 Introducere in meniurile Android

Tocmai am zgâriat suprafața cu meniuri Android, dar, sperăm, este suficient să vă inspire să săpați mai adânc.