Лучший способ создать выпадающее меню в android 2.x, как в ICS

Я хочу создать кнопку с выпадающим меню, например кнопку переполнения меню в ActionBar на ICS. У меня проблема, потому что PopupMenu нет в android 2.x. Второй способ использования Spinner, но это не для меня, потому что Spinner всегда показывает первый элемент на моем обычном фоне или моем выбранном элементе. Как я могу получить его? В общем, я хочу ContextMenu, но немного, и по клику по позиции. Спасибо.

Он выглядит так: Overflow menu in right top corner

Ответ 1

Если ваша цель состоит в том, чтобы воссоздать панель действий, вы можете посмотреть проект ActionBarSherlock, который будет поддерживать их функции.

Если вы хотите использовать такое меню в любом месте своего приложения, вы можете прочитать реализацию MenuPopupHelper в исходном коде проекта ActionBarSherlock.

Ответ 2

Я использую PopupWindow для такого рода вещей. Это больше работает, чем PopupMenu, где вы просто даете ему меню и отвечаете на события с помощью OnMenuItemClickListener.onMenuItemClick(). С помощью PopupWindow вы обеспечиваете просмотр содержимого и обрабатываете клики на несколько более низком уровне.

Тем не менее, он выполняет свою работу без особых проблем. Метод showAsDropDown() позволяет привязать всплывающее окно к другому представлению (поместите его соответствующим образом как раскрывающееся или всплывающее меню), как хотите. Это было вокруг с уровня API 1 и отлично работает для меня на всех моих тестовых устройствах.

Ответ 3

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

button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if (LISTVIEW.isShown()) {
                    LISTVIEW.setVisibility(View.INVISIBLE);
                } else {
                    LISTVIEW.setVisibility(View.VISIBLE);
                }

сообщите мне, если это поможет...