En introduktion til Android-menuer

Der er tre typer menuer i Android: Popup, Contextual og Options.

Hver enkelt har en bestemt brugssag og kode, der følger med den. For at lære at bruge dem, læs videre.

Hver menu skal have en XML-fil relateret til den, der definerer dens layout. Dette er de tags, der er knyttet til menupunktet:

- Dette er containerelementet til din menu (ligner LinearLayout)

- Dette angiver et element og er indlejret inde i menumærket. Vær opmærksom på, at et elementelement kan indeholde et element, der repræsenterer en undermenu

- Dette bruges til at betegne en bestemt egenskab eller funktion til et par menupunkter (IE-tilstand / synlighed)

Som vist i kodestykket ovenfor har hvert menupunkt forskellige attributter tilknyttet. Jeg beskriver de vigtigste her, men hvis du vil se, hvad du ellers kan tilføje, skal du gå her.

  • id - Dette er en unik identifikator for elementet i menuen. Du kan bruge dette til at se nøjagtigt, hvilket element brugeren klikkede på
  • ikon - Hvis du vil vise et ikon, der er knyttet til dette menupunkt
  • title - Tekst, der vises i menuen for det element
  • showAsAction - Denne attribut skal kun bruges, når der bruges en menu i en aktivitet, der bruger en applikationslinje (eller som den også henvises til, handlingslinjen). Det styrer, hvornår og hvordan dette element skal vises som en handling i applikationslinjen. Der er fem værdier: altid, aldrig, ifRoom, withText og collapseActionView
android:showAsAction="always|never|ifRoom|withText|collapseActionView" 

Jeg vil uddybe betydningen af ​​hver af disse værdier i det næste afsnit.

Derudover skal du tilføje den relevante onCreate-menu-metode til din aktivitet.

//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); }

Indstillingsmenu

Denne menu findes normalt øverst i din applikation, og i den skal du placere handlinger, der påvirker applikationen som helhed. Disse kan være programmets indstillinger eller et søgefelt.

Ved hjælp af menulayoutet ovenfra får vi følgende valgmenu:

Som lovet, lad os gå over de værdier, der kan gives til attributten showAsAction:

  • altid - vises altid i handlingslinjen
  • aldrig - vil aldrig vises, og vil derfor være tilgængelig gennem menuen overløb
  • ifRoom - kun hvis der er tilstrækkelig plads i handlingslinjen, ville det blive vist. Husk, at der i henhold til dokumentationen er en grænse for, hvor mange ikoner du kan have på handlingslinjen.
  • withText-inkluderer elementets titel i handlingslinjen
  • collapseActionView - hvis dette element har en handlingsvisning tilknyttet, bliver det sammenklappeligt (fra API 14 og derover)

Hvis vi går videre og ændrer det sidste punkt i vores menu til at viseAsAction = ”aldrig” , får vi følgende:

Billede til post

Kontekstmenu

Denne menu vises, når en bruger udfører et langt klik på et af dine UI-elementer. Indstillingerne, der findes i denne menu, påvirker hvilket brugergrænsefladeelement brugeren lavede et klik på. Det er almindeligt at bruge denne type menu i liste- eller gittervisninger, hvor brugerens interaktion med hvert element kan føre til en bestemt handling.

Forestil dig et scenarie, hvor du har en applikation med et billede, og du vil præsentere for brugeren flere valgmuligheder, når de klikker på billedet.

En kontekstmenu kan vises på to måder:

  1. En flydende menu
  2. En handlingslinje øverst i din applikation

Vi vil kun demonstrere, hvordan du bruger den første mulighed, men du kan læse mere om den anden mulighed her.

Brug af følgende XML:

Og tilføje følgende kode til vores hovedaktivitet:

 @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); }

Vi får følgende:

Pop op-menu

En popup-menu er en type menu, der viser emner i en lodret liste. Denne liste er knyttet til den visning, som brugeren har klikket på for at påkalde denne menu. Det er vigtigt at huske på, at når du vælger en popup-menu, vil du ikke have, at brugerens valg skal påvirke det tidligere indhold, som brugeren trykkede på.

Vi bruger den samme menu XML-layout som før, men vi bliver nødt til at tilføje følgende kode til vores aktivitet:

void showPopupMenu(View view) { PopupMenu popup = new PopupMenu(this, view); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.actions, popup.getMenu()); popup.show(); }

Vi får det samme resultat som det forrige skærmbillede, men uden at brugeren behøver at udføre et langt klik.

Ikoner i pop op-menuer

Nu ved jeg, hvad du sandsynligvis er her for: du vil vide, hvordan du kan tilføje ikoner til menuerne .

Mens jeg vil vise et eksempel på, hvordan man gør dette, er det klogt at forstå, at dette er en funktion, der ikke er aktiveret til popup-menuer og kan forårsage uventet opførsel. Du kan opnå dette ved at bruge refleksion til at tænde et flag kaldet 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(); }

Jeg har lige skrabet overfladen med Android-menuer, men forhåbentlig er det nok til at inspirere dig til at grave dybere.