Показывать всплывающее меню при нажатии на элемент панели действий

Как добавить всплывающее меню при нажатии на элемент панели действий (см. Скриншот)? Я хочу, чтобы пункт меню показывал значок.

Вещи, которые я пробовал:

  1. Настройка actionProvider (поддержка lib v7) для элемента панели действий. В actionProvider вернуть null для onCreateActionView. В onPrepareSubMenu заполните подменю. Это работает на Android 2.x, но не на Android 4.0, а для Android 2.x значок отсутствует.

  2. В actionProvider, создайте вид изображения и, нажав, показывает PopupMenu, но всплывающее меню не имеет иконки, когда я специально использовал setIcon, чтобы показать его.

Я не понимаю, почему PopupMenu не показывает значок. Я следовал "официальному" коду как можно ближе, но безрезультатно.

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/widget/ShareActionProvider.java#195

Пожалуйста помоги! Спасибо!

3 ответа

Используйте popUpMenu ->>> Follow>

Рез / меню / horario.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item 
    android:id="@+id/menu_MudaDia"
    android:titleCondensed="Mudar Dia" 
    android:title="Mudar Dia" 
    android:icon="@drawable/ic_menu_popup" 
    android:showAsAction="always">
</item>

activity.class

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    menu.clear();
    inflater.inflate(R.menu.horario, menu);

    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {



    switch (item.getItemId()) {
    case R.id.menu_MudaDia:
        View vItem = getActivity().findViewById(R.id.menu_MudaDia);
        PopupMenu popMenu = new PopupMenu(getActivity(), vItem);
        for (int i = 0; i < diaSemana.length; i++) 
        {
            popMenu.getMenu().add(0, i, i, diaSemana[i]);
        }

        popMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {

            @Override
            public boolean onMenuItemClick(MenuItem item) {
                DIA = diaSemana[item.getItemId()];
                atualizaGUI();
                return true;
            }
        });
        popMenu.show();
        break;

    default:
        break;
    }

    return super.onOptionsItemSelected(item);
}

Я использую библиотеку поддержки v7 и работает хорошо.

- используйте ActionProvider

Я использую пользовательский ActionProvider, и он хорошо работает в 2.x и 4.x, код в onPrepareSubMenu

subMenu.clear();
// labels contain list item text.
int len = labels.length;  
for(int i = 0; i < len; i++) {
 subMenu.add(0, labels[i], i, labels[i])
        .setIcon(icons[i])
        .setOnMenuItemClickListener(new MineMenuItemClickListener());
}
super.onPrepareSubMenu(subMenu);

- о PopupMenu

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

Как этот человек делает CustomPopupMenu

Единственное изменение это добавить mPopup.setForceShowIcon(true);

Вы можете попробовать создать макет с помощью ImageView и TextView. Надуйте этот макет внутри PopUpWindow (см.: http://developer.android.com/reference/android/widget/PopupWindow.html).

Используйте метод showAsDropDown(View actionBarIcon), чтобы отобразить меню на щелчке значка на панели действий.

Другие вопросы по тегам