Bevezetés az Android menükbe

Háromféle menü van az Androidban: Popup, Contextual és Options.

Mindegyiknek van egy speciális használati esete és kódja, amely hozzá tartozik. A használatuk megismeréséhez olvassa el tovább.

Minden menünek tartalmaznia kell egy XML fájlt, amely meghatározza annak elrendezését. Ezek a menüopcióhoz társított címkék:

- Ez a menü tároló eleme (hasonló a LinearLayout-hoz)

- Ez egy elemet jelöl és be van ágyazva a menücímkébe. Ne feledje, hogy egy elem elem tartalmazhat egy elemet egy almenü képviseletére

- Ez arra szolgál, hogy egy bizonyos tulajdonságot vagy funkciót jelöljön meg pár menüpontban (IE állapot / láthatóság)

Amint a fenti kódrészletből látható, minden menüelemhez különféle attribútumok társulnak. A főbbeket itt részletezem, de ha meg szeretné tudni, hogy mi mást adhat hozzá, menjen ide.

  • id - Ez a menüben szereplő elem egyedi azonosítója. Ezzel megnézheti, hogy a felhasználó pontosan mely elemre kattintott
  • ikon - Ha egy ikont szeretne megjeleníteni az adott menüponthoz
  • title - Az adott menü menüjében megjelenő szöveg
  • showAsAction - Ezt az attribútumot csak akkor szabad használni, ha egy olyan menüt használ egy tevékenységnél, amely alkalmazássávot használ (vagy ahogy arra utal, a műveletsávot is). Azt szabályozza, hogy ez az elem mikor és hogyan jelenjen meg műveletként az alkalmazássávon. Öt érték van: mindig, soha, ifRoom, withText és collapseActionView
android:showAsAction="always|never|ifRoom|withText|collapseActionView" 

Ezen értékek jelentését a következő szakaszban részletezem.

Ezen felül hozzá kell adnia a tevékenységéhez a vonatkozó onCreate menü metódust.

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

Opciók menü

Ez a menü általában az alkalmazás tetején található, és abban olyan műveleteket kell elhelyeznie, amelyek hatással vannak az alkalmazás egészére. Ezek lehetnek az alkalmazás beállításai vagy egy keresőmező.

A fenti menüelrendezést használva a következő opciók menüt kapjuk:

Ahogy ígértük, nézzük át a showAsAction attribútumhoz adható értékeket:

  • mindig - mindig megjelenik a műveletsávban
  • soha - soha nem fog megjelenni, ezért elérhető lesz a túlcsordulás menüben
  • ifRoom - csak akkor, ha elegendő hely van a műveletsávban, akkor megjelenik. Ne feledje, hogy a dokumentáció szerint korlátozva van, hogy hány ikon lehet a műveletsávon.
  • A withText-tartalmazza az elem címét a műveletsávban
  • collapseActionView - ha ehhez az elemhez társul egy műveletnézet, akkor összecsukhatóvá válik (az API 14-től és annál magasabb)

Ha megyünk előre, és megváltoztatjuk a menü utolsó elemét a showAsAction = "soha" értékre , a következőket kapjuk:

Kép a bejegyzéshez

Kontextus menü

Ez a menü akkor jelenik meg, amikor a felhasználó hosszú kattintással végrehajtja az egyik felhasználói felület elemét. Az ebben a menüben található opciók befolyásolják, hogy a felhasználó milyen UI elemre kattintott. Gyakran használják ezt a típusú menüt listában vagy rács nézetben, ahol a felhasználó interakciója az egyes elemekkel egy adott művelethez vezethet.

Képzeljen el egy olyan forgatókönyvet, ahol van egy képpel ellátott alkalmazás, és több választási lehetőséget szeretne bemutatni a felhasználónak, amikor rákattint a képre.

A helyi menü kétféleképpen jelenhet meg:

  1. Lebegő menü
  2. Műveletsáv az alkalmazás tetején

Csak az első lehetőség használatát mutatjuk be, de a második lehetőségről itt olvashat bővebben.

A következő XML használatával:

És hozzáadjuk a következő kódot fő tevékenységünkhöz:

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

A következőket kapjuk:

Felugró menü

A felugró menü egy olyan típusú menü, amely függőleges listában jeleníti meg az elemeket. Ez a lista ahhoz a nézethez van csatolva, amelyre a felhasználó rákattintott a menü meghívásához. Fontos szem előtt tartani, hogy a felugró menü kiválasztásakor nem kívánja, hogy a felhasználó választása befolyásolja a felhasználó előző megnyomott tartalmát.

Ugyanazt a menü XML elrendezést fogjuk használni, mint korábban, de a következő kódot kell hozzáadnunk a tevékenységünkhöz:

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

Ugyanazt az eredményt kapjuk, mint az előző képernyőképet, de anélkül, hogy a felhasználónak hosszú kattintást kellene végrehajtania.

Ikonok a felugró menükben

Most már tudom, mire valószinűleg itt vagy: tudni akarod, hogyan adhatsz hozzá ikonokat a menükhöz .

Míg bemutatok egy példát erre, bölcs dolog megérteni, hogy ez egy olyan funkció, amely nem engedélyezett a felugró menükben, és váratlan viselkedést okozhat. Ezt úgy érheti el, hogy a reflexióval bekapcsolja a setForceShowIcon nevű zászlót .

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

Most megkarcoltam a felületet Android-menükkel, de remélhetőleg elegendő arra, hogy inspirálja Önt a mélyebb ásatáshoz.