Gui*_*ume 4 android menu popup
有没有人知道在谷歌地图官方应用程序的新版本6中用于菜单的组件是什么?
我正在尝试构建一个类似于此的菜单,在官方开发页面中找不到任何内容(注意:我的目标是Gingerbread API,可能具有高达1.6的向后兼容性.)
这是我在这个菜单中找到的唯一图片(这是在ICS上,但姜饼上显示的内容类似).请看这里的左侧截图(来自Gizmodo网站):
来自Gizmodo http://media.gizmodo.co.uk/wp-content/uploads/2011/11/GoogleMaps6.0.jpg
如果没有内置组件,您会采用什么方法来构建一个?
在最糟糕的情况下,如果Android 2.x不存在此类组件,您是否知道Google Map应用程序本身是否是开源的,以及在何处查找其来源?
Ole*_*ich 11
这应该适用于API 4(但未经过测试,YMMV).例如:
如果您使用的是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
Run Code Online (Sandbox Code Playgroud)
片段/活动中的内部类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
每当你需要展示它时(例如在aa中View.OnClickListener
)
mPopupMenu.setContentWidth(getActivity().getWindowManager().getDefaultDisplay().getWidth() / 2);
PopupAdapter.notifyDataSetChanged(); // if you change anything
mPopupMenu.setAnchorView(yourAnchorView);
mPopupMenu.show();
Run Code Online (Sandbox Code Playgroud)
在OnItemClickListener中
一定要打电话mPopupMenu.dismiss()
!
希望这可以帮助!感谢Jake Wharton的ABS!
归档时间: |
|
查看次数: |
12398 次 |
最近记录: |