Bonjour, je développe une application Android. Dans mon application, j'utilise l'action Sherlock. J'ai défini quelques éléments de menu dans la barre d'action, comme ci-dessous
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:id="@+id/card_menu"
Android:actionLayout="@layout/action_button"
Android:showAsAction="always"
Android:title="cards">
<menu>
<item
Android:id="@+id/C1"
Android:title="C1"/>
<item
Android:id="@+id/C2"
Android:title="c2"/>
<item
Android:id="@+id/C3"
Android:title="C3"/>
</menu>
</item>
<item
Android:id="@+id/notification"
Android:actionLayout="@layout/notification_icon"
Android:icon="@drawable/notification"
Android:showAsAction="always"
Android:title="Notifications"/>
<item
Android:id="@+id/filter"
Android:icon="@drawable/filter"
Android:showAsAction="always"
Android:title="Filter"/>
</menu>
et mon action_button ressemble à:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<ImageView
Android:id="@+id/menu_img"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/spinner_ab_focused_maroon"/>
<TextView
Android:id="@+id/menu_text"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_toRightOf="@+id/imageView0"
Android:text="C1"/>
</RelativeLayout>
Maintenant, tout est affiché, mais le problème est que lorsque je clique sur card_menu item
, je définis des sous-menus et définit également la disposition des actions. Cela ne montre pas ces sous-menus. Mes autres éléments de menu fonctionnent correctement. Ce n'est que lorsque je définis un format d'action pour mon article contenant des sous-menus que je ne peux pas afficher de sous-menu. Si je supprime la disposition d'action, cela fonctionne bien.
Je sais que si nous définissons la disposition des actions pour un élément, nous devons gérer manuellement l'écouteur de clics ..__Je l'ai fait de la manière suivante
final MenuItem item = menu.findItem(R.id.card_menu);
item.getActionView().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
onOptionsItemSelected(item);
Toast.makeText(getActivity(), "click on menu", Toast.LENGTH_SHORT).show();
}
});
Je suis capable de gérer les événements de clic pour cet élément, mais je ne peux pas afficher les éléments du sous-menu déroulant.
Comment résoudre ce problème?
Essayez ce code dans votre activité.
Assurez-vous de bien configurer votre
R.menu.menuidentifier
R.id.menuitemidentifier
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actionbarhelpmenu, menu);
final Menu m = menu;
final MenuItem item = menu.findItem(R.id.ActionConnection);
item.getActionView().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
m.performIdentifierAction(item.getItemId(), 0);
}
});
return true;
}
La réponse acceptée ne fonctionnait pas pour moi ... Mon sous-menu se comportait différemment selon les appareils ... sur Motorola Moto X:
Vous pouvez voir que le sous-menu est dans la mauvaise position (j'ai cliqué sur l'icône en forme de bulle à droite de la barre d'actions).
Donc à la fin, je suis venu avec une solution différente: utilisez PopupMenu à la place . Le code ressemble à ceci:
@Override
public void onCreateOptionsMenu(final Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_fragment_chat, menu);
final MenuItem item = menu.findItem(R.id.menu_item_actionbar_avatar);
MenuItemCompat.getActionView(item).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showProfileMenuPopup(v);
}
});
}
public void showProfileMenuPopup(View v) {
PopupMenu popup = new PopupMenu(getActivity(), v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.menu_avatar_actions, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
return false;
}
});
popup.show();
}
Et ça a marché :)
Code de travail complet
<item
Android:title="search"
Android:id="@+id/mSearch"
app:actionLayout="@layout/my_custom_menu_item"
Android:orderInCategory="100"
app:showAsAction="always"/>
Code:
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.menu,menu); MenuItem item = menu.findItem(R.id.mSearch);
ImageView iv= (ImageView) item.getActionView().findViewById(R.id.search_1);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "clicked", Toast.LENGTH_SHORT).show();
}
});
return true;
}
Reportez-vous à la répondre
S'il y a un bouton dans la structure d'action, Afin d'obtenir le rappel depuis l'élément de menu, n'oubliez pas de définir le bouton
Android:clickable="false"