Android
Menu
Zoeken…
Syntaxis
- inflater.inflate (R.menu.uw_xml_bestand, menu);
parameters
Parameter | Beschrijving |
---|---|
inflate(int menuRes, Menu menu) | Blaas een menuhiërarchie op uit de opgegeven XML-bron. |
getMenuInflater () | Retourneert een MenuInflater met deze context. |
onCreateOptionsMenu (Menu menu) | Initialiseer de inhoud van het standaardoptiemenu van de activiteit. U moet uw menu-items in het menu plaatsen. |
onOptionsItemSelected (MenuItem item) | Deze methode wordt aangeroepen wanneer een item in uw optiemenu wordt geselecteerd |
Opmerkingen
Lees dit voor meer informatie over menu's . Hoop dat het helpt!
Optiemenu met scheidingslijnen
In Android is er een standaardoptiemenu, dat een aantal opties kan bevatten. Als een groter aantal opties moet worden weergegeven, is het logisch om die opties te groeperen om de duidelijkheid te behouden. Opties kunnen worden gegroepeerd door scheidingslijnen (dwz horizontale lijnen) ertussen te plaatsen. Om scheidingslijnen mogelijk te maken, kan het volgende thema worden gebruikt:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:dropDownListViewStyle">@style/PopupMenuListView</item>
</style>
<style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
<item name="android:divider">@color/black</item>
<item name="android:dividerHeight">1dp</item>
</style>
Door het thema te wijzigen, kunnen scheidingslijnen aan een menu worden toegevoegd.
Pas een aangepast lettertype toe op Menu
public static void applyFontToMenu(Menu m, Context mContext){
for(int i=0;i<m.size();i++) {
applyFontToMenuItem(m.getItem(i),mContext);
}
}
public static void applyFontToMenuItem(MenuItem mi, Context mContext) {
if(mi.hasSubMenu())
for(int i=0;i<mi.getSubMenu().size();i++) {
applyFontToMenuItem(mi.getSubMenu().getItem(i),mContext);
}
Typeface font = Typeface.createFromAsset(mContext.getAssets(), "fonts/yourCustomFont.ttf");
SpannableString mNewTitle = new SpannableString(mi.getTitle());
mNewTitle.setSpan(new CustomTypefaceSpan("", font, mContext), 0, mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
mi.setTitle(mNewTitle);
}
en vervolgens in de activiteit:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
applyFontToMenu(menu,this);
return true;
}
Een menu maken in een activiteit
Om uw eigen menu te definiëren, maakt u een XML-bestand in de res/menu/
map van uw project en bouwt u het menu met de volgende elementen:
-
<menu>
: definieert een menu dat alle menu-items bevat. -
<item>
: Creëert een MenuItem, dat een enkel item in een menu vertegenwoordigt. We kunnen ook een genest element maken om een submenu te maken.
Stap 1:
Maak uw eigen XML-bestand als volgt: In res/menu/main_menu.xml
:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/aboutMenu"
android:title="About" />
<item
android:id="@+id/helpMenu"
android:title="Help" />
<item
android:id="@+id/signOutMenu"
android:title="Sign Out" />
</menu>
Stap 2:
Om het optiemenu op te geven, vervangt u onCreateOptionsMenu()
in uw activiteit .
Met deze methode kunt u uw res/menu/main_menu.xml
opblazen (gedefinieerd in uw XML-bestand, namelijk res/menu/main_menu.xml
)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
Wanneer de gebruiker een item uit het optiemenu selecteert, roept het systeem de overschreven methode van uw activiteit onOptionsItemSelected()
.
- Deze methode geeft het geselecteerde menu-item door.
- U kunt het item identificeren door
getItemId()
aan te roepen, die de unieke ID voor het menu-item retourneert (gedefinieerd door hetandroid:id attribute
in deres/menu/main_menu.xml
-res/menu/main_menu.xml
) * /
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.aboutMenu:
Log.d(TAG, "Clicked on About!");
// Code for About goes here
return true;
case R.id.helpMenu:
Log.d(TAG, "Clicked on Help!");
// Code for Help goes here
return true;
case R.id.signOutMenu:
Log.d(TAG, "Clicked on Sign Out!");
// SignOut method call goes here
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Afsluiten!
Uw Activity
moet er hieronder uitzien:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "mytag";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.aboutMenu:
Log.d(TAG, "Clicked on About!");
// Code for About goes here
return true;
case R.id.helpMenu:
Log.d(TAG, "Clicked on Help!");
// Code for Help goes here
return true;
case R.id.signOutMenu:
Log.d(TAG, "User signed out");
// SignOut method call goes here
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}