#ListPopupWindow
##ListPopupWindow简述
ListPopupWindow最低要求为api11,为了兼容到2.1, 可以使用包含在support V7包中实现。 从效果上来讲,ListPopupWindow就是一个弹出层的ListView,比较适合用来实现自定义的下拉菜单以及自定义的下拉选择列表。
##ListPopupWindow的使用
###自定义样式
一个示例:
#404040 //弹出层的背景
0dip
0dip //水平以及垂直位移
match_parent //这个效果不大
@drawable/list_selector //
#242424
1px
... //其他列表样式
tyle>
AppTheme是应用到Activity的主题
listPopupWindowStyle 对应弹出层的主题样式
dropDownListViewStyle 对应内含列表的主题样式,与普通ListView的定制方式一致
@style/V7.ListPopupWindowStyle
@style/V7.DropDownListViewStyle
###代码调用
实现微信右上角弹出菜单,使用方式与PopupWindow差不多:
ListPopupWindow listPopupWindow = new ListPopupWindow(this);
listPopupWindow.setAnchorView(view);
listPopupWindow.setWidth(300); //如果不设置宽度的话,默认取AnchorView的宽度,一般不是我们想要的结果
listPopupWindow.setModal(true); //是否为模态,影响到对back按钮的处理
listPopupWindow.setAdapter(new ArrayAdapter(this, R.layout.apt_v7_list_popup_window, R.id.apt_v7_tv, new String[]{
"发起群聊",
"添加朋友",
"扫一扫",
"意见反馈"
}));
listPopupWindow.show();
##与PopMenu的对比
PopMenu难以定制,ListPopupWindow的定制性更好
ListPopupWindow不能自适应宽度
PopMenu以面向菜单为核心,可以更方便的实现 禁用/开启 功能
一个让ListPopupWindow自适应宽度的方案,设置adapter后,检测每一行的最大宽度,然后再来设置 ListPopupWindow 的宽度,有利有弊,自己取舍了。
关于菜单那的其他实现方式:
PopMenu
PopupWindow + 自定义ContentView
页面内View + 自定义touch事件以及按键事件处理
##demo demo
Android分享 Q群:315658668