Intereting Posts
Как создать «скрытое» приложение Android? Как отправить multipart / form-data с помощью Retrofit? Активность камеры, возвращающая нулевой андроид Как определить, отображается ли раскрывающееся меню выше или ниже счетчика в андроиде? Android ImageButton – невозможно получить изображение в центре Установить изображение из галереи для фона настольного телефона (android-java) Android Wear и Google Fit: как заставить обновлять наборы данных между смартваром и смартфоном? Как найти местоположение пользователя с помощью ячеистой камеры? Android: не удалось выделить память Android-карты: как долго кликнуть карту? Изменить выбор в ListView с оранжевого на зеленый Определите, какой VIEW в нескольких представлениях имеет жест (двойной щелчок, проведите по экрану влево, проведите по экрану вправо и т. Д.)? Android Studio «Структура проекта» не подходит должным образом Обработчики Android – межпоточная связь IllegalStateException: контент был использован

Элемент меню панели действий Android с действиемLayout не работает должным образом

Привет, я разрабатываю приложение для Android. В моем приложении я использую действие Шерлока. Я определил несколько пунктов меню в панели действий, как следующим образом

<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> 

И My action_button выглядит так:

 <?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> 

Теперь все отображается, но моя проблема в том, что когда я нажимаю на card_menu item где я определяю подменю, а также определяю макет действия. Он не показывает эти подменю. Мои другие пункты меню работают правильно. Только когда я определяю макет действия для моего элемента, который содержит подменю, которые я не могу отобразить подменю. Если я удалю макет действия, он отлично работает.

Я знаю, если мы определяем макет действия для элемента, тогда мы должны вручную обработать функцию прослушивания кликов. Я сделал это следующим образом

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

Я могу обрабатывать событие click для этого элемента, но не могу показать выпадающие подменю.

Как решить эту проблему?

Solutions Collecting From Web of "Элемент меню панели действий Android с действиемLayout не работает должным образом"

Попробуйте этот код в своей деятельности.
Обязательно установите

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

Принятый ответ не помог мне. Мое подменю велось по-разному на разных устройствах. На Motorola Moto X это было так: Введите описание изображения здесь

Вы можете видеть, что подменю находится в неправильном положении (я нажал на значок пузыря справа от ActionBar).

Поэтому в конце я придумал другое решение: вместо этого используйте PopupMenu. Код выглядит следующим образом:

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

И это сработало 🙂

См. Ответ

Если в макете действия есть кнопка, чтобы получить обратный вызов из пункта меню, не забудьте установить кнопку

 android:clickable="false" 

Полный рабочий код

  <item android:title="search" android:id="@+id/mSearch" app:actionLayout="@layout/my_custom_menu_item" android:orderInCategory="100" app:showAsAction="always"/> 

Код:

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