android listpopupwindow 源码分析,【Android】ListPopupWindow

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值