ListPopupWindow 列表弹窗 常见弹窗区别

案例

private void showPopupWindow(final Context context, @NonNull View anchorView) {
    final String[] popWindowItems = {"使用教程", "声音广场"};//显示的内容
    final ListPopupWindow popupWindow = new ListPopupWindow(context);
    popupWindow.setAdapter(adapter);//可以使用通用的BaseAdapter,也可以用PopupArrayAdapter(context, array)这些具有默认UI效果的adapter
    popupWindow.setWidth(ViewUtils.dipToPx(this, 120));//也可以设置具体的值。容易出错的地方
    popupWindow.setHeight(ListPopupWindow.WRAP_CONTENT);
    popupWindow.setAnchorView(anchorView);//设置参照控件
    popupWindow.setHorizontalOffset(ViewUtils.dipToPx(context, -16));//相对锚点偏移值,正值表示向右偏移
    popupWindow.setVerticalOffset(ViewUtils.dipToPx(context, -16));//相对锚点偏移值,正值表示向下偏移
    popupWindow.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.popup_window_selector));
    popupWindow.setDropDownGravity(Gravity.END);//设置对齐方式。Gravity.START表示与参照控件左侧对齐,Gravity.END表示与参照控件右侧对齐。容易出错的地方
    popupWindow.setModal(true);//模态框,设置为true响应物理键
    popupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            popupWindow.dismiss();
        }
    });
    popupWindow.show();
}

20

20

1

private void showPopupWindow(final Context context, @NonNull View anchorView) {

2

    final String[] popWindowItems = {"使用教程", "声音广场"};//显示的内容

3

    final ListPopupWindow popupWindow = new ListPopupWindow(context);

4

    popupWindow.setAdapter(adapter);//可以使用通用的BaseAdapter,也可以用PopupArrayAdapter(context, array)这些具有默认UI效果的adapter

5

    popupWindow.setWidth(ViewUtils.dipToPx(this, 120));//也可以设置具体的值。容易出错的地方

6

    popupWindow.setHeight(ListPopupWindow.WRAP_CONTENT);

7

    popupWindow.setAnchorView(anchorView);//设置参照控件

8

    popupWindow.setHorizontalOffset(ViewUtils.dipToPx(context, -16));//相对锚点偏移值,正值表示向右偏移

9

    popupWindow.setVerticalOffset(ViewUtils.dipToPx(context, -16));//相对锚点偏移值,正值表示向下偏移

10

    popupWindow.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.popup_window_selector));

11

    popupWindow.setDropDownGravity(Gravity.END);//设置对齐方式。Gravity.START表示与参照控件左侧对齐,Gravity.END表示与参照控件右侧对齐。容易出错的地方

12

    popupWindow.setModal(true);//模态框,设置为true响应物理键

13

    popupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {

14

        @Override

15

        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

16

            popupWindow.dismiss();

17

        }

18

    });

19

    popupWindow.show();

20

}

ListPopupWindow 简介

ListPopupWindow也是在参照控件下方显示列表窗口,不同的是,它在展示上更加灵活,开发者可以自定义列表弹窗的大小与样式。

下面是ListPopupWindow的常用方法说明:

  • setAdapter : 设置下拉列表的数据适配器。
  • setModal : 设置显示模式,设置为true响应物理键
  • setWidth : 设置下拉列表窗口的宽度。
  • setHeight : 设置下拉列表窗口的高度。
  • setAnchorView : 设置下拉列表的参照控件,下拉列表在显示时将展现在参照控件的下方。注意:如果不设置参照控件就直接调用show函数,系统不知道要把下拉列表在何处展示,只能是异常退出了。
  • setDropDownGravity : 设置下拉列表的对齐方式。Gravity.START表示与参照控件左侧对齐,Gravity.END表示与参照控件右侧对齐。注意:该函数只在4.4.2及以上版本中使用。
  • setOnItemClickListener : 设置列表项的点击监听器。
  • setHorizontalOffset : 相对锚点偏移值,正值表示向右偏移
  • setVerticalOffset : 相对锚点偏移值,正值表示向下偏移
  • show : 显示下拉列表窗口。
  • dismiss : 关闭下拉列表窗口。
  • setOnDismissListener : 设置下拉列表的关闭监听器。

PopupMenu 简介

构造函数 :

public PopupMenu(Context context, View anchor) {
   this(context, anchor, Gravity.NO_GRAVITY);
}
public PopupMenu(Context context, View anchor, int gravity) {
   this(context, anchor, gravity, R.attr.popupMenuStyle, 0);
}
public PopupMenu(Context context, View anchor, int gravity, int popupStyleAttr, int popupStyleRes) { }

7

7

1

public PopupMenu(Context context, View anchor) {

2

   this(context, anchor, Gravity.NO_GRAVITY);

3

}

4

public PopupMenu(Context context, View anchor, int gravity) {

5

   this(context, anchor, gravity, R.attr.popupMenuStyle, 0);

6

}

7

public PopupMenu(Context context, View anchor, int gravity, int popupStyleAttr, int popupStyleRes) { }

构造一个PopupMenu对象,并指定该对象的参照控件,对齐方式。

常用方法:

  • inflate : 根据指定的菜单资源文件 R.menu.***,把具体的菜单项目填充到PopupMenu对象中。
Inflate a menu resource into this PopupMenu. This is equivalent to calling popupMenu.getMenuInflater().inflate(menuRes, popupMenu.getMenu()).

1

1

Inflate a menu resource into this PopupMenu. This is equivalent to calling popupMenu.getMenuInflater().inflate(menuRes, popupMenu.getMenu()).
  • show : 显示弹出菜单。
  • dismiss : 关闭弹出菜单。

  • setOnMenuItemClickListener : 设置菜单项的点击监听器。该监听器由接口OnMenuItemClickListener派生而来,要重写onMenuItemClick方法来实现菜单项点击事件。
  • setOnDismissListener : 设置弹出菜单的关闭监听器。
  • setGravity / getGravity : 对齐方式
Sets the gravity used to align the popup window to its anchor view.
If the popup is showing, calling this method will take effect only the next time the popup is shown.

2

1

Sets the gravity used to align the popup window to its anchor view.

2

If the popup is showing, calling this method will take effect only the next time the popup is shown.
  • getMenuInflater
  • getMenu()
Returns the Menu associated with this popup. Populate the returned Menu with items before calling show().

1

1

Returns the Menu associated with this popup. Populate the returned Menu with items before calling show().
  • getMenuListView
Returns the ListView representing the list of menu items in the currently showing menu.

1

1

Returns the ListView representing the list of menu items in the currently showing menu.

常见弹窗的区别

参考:http://blog.csdn.net/aqi00/article/details/52352745

PopupMenu是种显示位置不固定的弹出菜单,其展示位置随着参照控件的位置变化而变化。

下面几种菜单的显示位置都是固定的

  • 选项菜单Options固定显示在屏幕下方
  • 上下文菜单ContextMenu固定显示在屏幕中央
  • 溢出菜单OverflowMenu固定显示在屏幕右上角

PopupMenu、ListPopupWindow和Spinner的区别:

  • 1、查看源码,会发现PopupMenu和Spinner内部都是使用ListPopupWindow实现下拉列表效果,所以ListPopupWindow是基础。
  • 2、PopMenu的列表页面无法定制UI,只能显示光秃秃的文字;而ListPopupWindow和Spinner可以通过适配器来设置每项的布局风格,当然ListPopupWindow是最灵活的,不但可在左侧显示列表,还能在右侧显示列表。
  • 3、PopMenu可通过子菜单实现多级菜单效果,而ListPopupWindow和Spinner只有一级列表。
  • 4、ListPopupWindow和Spinner可以设置默认选中项,而PopMenu没有默认选中项。
  • 5、Spinner既可以下拉列表来展示,也可以对话框来展示;而PopupMenu和ListPopupWindow只能以下拉列表展示。

2017-2-20

原文地址:https://www.cnblogs.com/baiqiantao/p/8127888.html

时间: 2024-10-10 01:05:21

ListPopupWindow 列表弹窗 常见弹窗区别的相关文章

Python 中使用列表解析时候的区别

使用[] + for语句是解析列表 而使用() + for语句是产生生成器 实例代码如下: alist = [1, 2, 3, 4, 5] another_list = [i for i in alist] print another_list a_generator = (i for i in alist) print a_generator for i in a_generator: print i Python 中使用列表解析时候的区别

笨方法学python(6)加分题--列表与字典的区别

he string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) P A H N A P L S I I G Y I R And then read line by line: "PAHNAPLSIIG

python 列表的操作(添加删除)列表和元组的区别

python 列表的操作(添加删除) 1.列表的添加:append 和extend append 和extend 的区别:  append只能追加1个元素  ,extend可以追加多个 >>> lst1=[1,2,3,4] >>> lst1.append(5) >>> lst1 [1, 2, 3, 4, 5] >>> lst1.extend([6,7,8]) >>> lst1 [1, 2, 3, 4, 5, 6, 7

关于laui 弹窗使用弹窗中jsp点击按钮不能用小问题

在laui 弹窗使用中弹窗中jsp点击按钮不能用,但是单独访问弹窗的jsp页面时,未报错,也没有出现问题,点击按钮可以使用 问题解决:错误原因,在使用弹窗页面中,自定义了<span> 的样式,出现了样式冲突问题 解决:更改样式 原文地址:https://www.cnblogs.com/jsbk/p/9459667.html

Vue列表组件与弹窗组件示例

列表组件 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Page Title</title> <meta name="viewport" content=

Python中列表list常见操作

主要涉及知识点 列表是我们python里面最常见的数据类型,我们主要有以下的操作. 1.索引 2.切片 3.追加 4.删除 5.长度 6.循环 (也称遍历) 7.包含 8.嵌套 例如定义列表: List2=['openstack','python','linux',"docker","zabbix","nginx","linux","linux","123","ww33##&q

.NET重思(三)-数组列表与数组的区别,栈集合和队列结合的区别

数组列表和数组十分相似,区别在于数组列表的容量是可以动态变化的,而数组的容量是固定的.数组即Array类,数组列表即ArrayList类,两者十分相似.不过,Array类在System命名空间下,ArrayList类在System.Collections命名空间下.数组在初始化时需要指定容量,并且指定之后无法改变,而数组列表可以动态的改变容量. //初始化ArrayList ArrayList lst = new ArrayList(); //初始化ArrayList并将容量设置为100 Arr

列表和元组的区别、使用方法

一.二者区别 列表: 1.可以增加列表内容     append 2.可以统计某个列表段在整个列表中出现的次数 count 3.可以插入一个字符串,并把整个字符串的每个字母拆分当作一个列表段追加到列表当中 extedn 4.可以查询某个列表段在整个列表的位置 index 5.可以在指定位置插入一个列表段 insert 6.可以删除列表的最后一个列表段 pop 7.可以删除指定列表中的某个列表段 remove 8.可以正向反向排序 reverse 9.可以按字母或数字排序 sort 10.定义列表

列表与元组的区别

相同点:都是序列类型 回答它们的区别之前,先来说说两者有什么相同之处.list 与 tuple 都是序列类型的容器对象,可以存放任何类型的数据.支持切片.迭代等操作 >>> foos = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> foos[0:10:2][0, 2, 4, 6, 8] >>> bars = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)>>> bars[1:10:2](1, 3,