Android
Menu
Recherche…
Syntaxe
- inflater.inflate (R.menu.your_xml_file, menu);
Paramètres
Paramètre | La description |
---|---|
inflate(int menuRes, Menu menu) | Gonflez une hiérarchie de menus à partir de la ressource XML spécifiée. |
getMenuInflater () | Retourne un MenuInflater avec ce contexte. |
onCreateOptionsMenu (Menu menu) | Initialiser le contenu du menu d'options standard de l'activité. Vous devez placer vos éléments de menu dans le menu. |
onOptionsItemSelected (MenuItem item) | Cette méthode est appelée chaque fois qu'un élément de votre menu d'options est sélectionné |
Remarques
Pour en savoir plus sur les menus , lisez ceci . J'espère que cela aide!
Menu d'options avec séparateurs
Dans Android, il existe un menu d'options par défaut, qui peut prendre un certain nombre d'options. Si un plus grand nombre d'options doit être affiché, il est judicieux de regrouper ces options afin de conserver la clarté. Les options peuvent être regroupées en mettant des séparateurs (lignes horizontales) entre eux. Pour permettre des séparateurs, le thème suivant peut être utilisé:
<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>
En modifiant le thème, des séparateurs peuvent être ajoutés à un menu.
Appliquer une police personnalisée à 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);
}
et ensuite dans l'activité:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
applyFontToMenu(menu,this);
return true;
}
Créer un menu dans une activité
Pour définir votre propre menu, créez un fichier XML dans le répertoire res/menu/
votre projet et créez le menu avec les éléments suivants:
-
<menu>
: définit un menu contenant tous les éléments du menu. -
<item>
: crée un MenuItem, qui représente un seul élément dans un menu. Nous pouvons également créer un élément imbriqué afin de créer un sous-menu.
Étape 1:
Créez votre propre fichier xml comme suit: Dans 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>
Étape 2:
Pour spécifier le menu d'options, remplacez onCreateOptionsMenu()
dans votre activité .
Dans cette méthode, vous pouvez gonfler votre ressource de menu (définie dans votre fichier XML, à savoir res/menu/main_menu.xml
)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
Lorsque l'utilisateur sélectionne un élément dans le menu d'options, le système appelle la méthode onOptionsItemSelected()
votre activité .
- Cette méthode passe le menuItem sélectionné.
- Vous pouvez identifier l'élément en appelant
getItemId()
, qui renvoie l'identifiant unique de l'élément de menu (défini par l'android:id attribute
dans la ressource de menu -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);
}
}
Emballer!
Votre code d' Activity
devrait ressembler à ceci:
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);
}
}
}