Всплывающее меню Android с иконками (аналогично приложению Google Map версии 6) - PullRequest
4 голосов
/ 30 ноября 2011

Кто-нибудь знает, какой компонент используется для меню в новой версии 6 официального приложения Google Map для Android?

Я пытаюсь создать меню, похожее на это, не могу найти ничего на официальных страницах разработчика (Примечание: я нацеливаюсь на API Gingerbread, возможно, с обратной совместимостью до 1.6.)

Вот единственное изображение, которое я нашел в этом меню (это на ICS, но что-то похожее отображается на Gingerbread).Пожалуйста, посмотрите на скриншот слева здесь (с сайта Gizmodo ):

от Gizmodo http://media.gizmodo.co.uk/wp-content/uploads/2011/11/GoogleMaps6.0.jpg

Если нет встроенного компонента, какой подход будетВы хотите создать его?

В худшем случае, если для Android 2.x такого компонента не существует, знаете ли вы, является ли приложение Google Map открытым исходным кодом и где его найти?

Ответы [ 4 ]

11 голосов
/ 01 августа 2012

Это должно работать до API 4 (но не проверено, YMMV). Например:

An example

Если вы используете ActionBarSherlock, вы можете использовать класс IcsListPopupWindow. Установите некоторые свойства в onCreate. Вам также понадобится создать подкласс ArrayAdapter.

в onCreate ():

mPopupMenu = new IcsListPopupWindow(getContext());
mAdapter = new PopupMenuAdapter(this, android.R.layout.simple_list_item_1, yourArrayOfPopupMenuItems);
mPopupMenu.setAdapter(mAdapter);
mPopupMenu.setModal(true);
mPopupMenu.setOnItemClickListener(this);
mPopupMenu.setOnDismissListener(this); // only if you need it

Внутренние классы в вашем фрагменте / деятельности:

private class PopupMenuAdapter extends ArrayAdapter<PopupMenuItem> {

    Context context;
    int layoutResourceId;
    PopupMenuItem data[] = null;

    public PopupMenuAdapter(Context context, int layoutResourceId, PopupMenuItem[] data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;

        // initialize a view first
        if (view == null) {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            view = inflater.inflate(layoutResourceId, parent, false);
        }

        PopupMenuItem pItem = data[position];
        TextView text = (TextView)view.findViewById(android.R.id.text1);
        text.setText(pItem.textResId);
        text.setCompoundDrawablesWithIntrinsicBounds(pItem.iconResId, 0, 0, 0);

        return view;
    }
}

// ... PopupMenuItem is just a container

private static class PopupMenuItem {
    public int iconResId;
    public int textResId;

    public PopupMenuItem(int iconResId, int textResId) {
        this.iconResId = iconResId;
        this.textResId = textResId;
    }
}

Всякий раз, когда вам нужно показать это (например, в View.OnClickListener)

mPopupMenu.setContentWidth(getActivity().getWindowManager().getDefaultDisplay().getWidth() / 2);
PopupAdapter.notifyDataSetChanged(); // if you change anything
mPopupMenu.setAnchorView(yourAnchorView);
mPopupMenu.show();

В вашем OnItemClickListener

Обязательно позвоните mPopupMenu.dismiss()!

Надеюсь, это поможет! И спасибо Джейку Уортону за ABS!

4 голосов
/ 30 ноября 2011

PopupMenu, вероятно, то, что вы ищете.Однако он работает только на Android 3.0+ (представлен в API Level 11) и, насколько я знаю, его нет в библиотеке совместимости.

2 голосов
/ 30 ноября 2011

Просто посмотрите на следующую ссылку.Есть хорошие примеры диалогового окна «Быстрое действие». Так что вы можете изменить код так, как вам хочется.

http://www.londatiga.net/it/how-to-create-quickaction-dialog-in-android/

0 голосов
/ 22 мая 2012

Это больше похоже на настраиваемую панель действий. Вероятно, ActionProvider . Панель ActionBar доступна начиная с уровня API 11, но посмотрите ActionBarSherlock .

...