一个
Spinner
使用
ListPopupWindow
显示下拉列表,你可以使用相同的方法来显示多项选择列表:
private void showPopup() {
final ListPopupWindow lpw = new ListPopupWindow(this);
lpw.setAdapter();
lpw.setAnchorView(mAnchor);
lpw.setContentWidth();
lpw.show();
mAnchor.post(new Runnable() {
@Override
public void run() {
lpw.getListView().setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
}
});
}
您可以在选中正确的
MenuItem
时,从
onOptionsItemSelected()
回调中调用此方法。您需要注意两件事情:
mAnchor
是一个
View
,您需要将其插入到
Activity
布局的右上角,以便
ListPopupWindow
显示在正确的位置。例如,如果您的
Activity
根视图为
RelativeLayout
,则
mAnchor
将是:
mAnchor = new View(this);
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(0, 0);
rlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
mAnchor.setLayoutParams(rlp);
// add mAnchorView first to the RelativeLayout
如果一个LinearLayout
,那么mAnchor
将会是:
mAnchor = new View(this)
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(0, 0)
llp.gravity = Gravity.RIGHT
mAnchor.setLayoutParams(llp)
// add mAnchorView first to the LinearLayout(assuming orientation vertical)
对于其他类型的布局也是这样。
其次,您需要设置ListPopupWindow
的宽度为所需值。您需要根据不同的屏幕大小和方向(如手机纵向和横向,纵向和横向的不同表格尺寸)来适应此值。