最近在做下拉框,本来想用spinner,可是spinner达不到项目要求,跟同学同事问了一圈,都在用popwindow,

网上看了一下,popwindow挺简单的,可定制性挺强的,符合我的要求,所以,借鉴网上看的代码,自己撸了一

遍。写篇博客以防忘记。

首先,先写个自定义布局,代码如下

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="110dp"
  5. android:layout_height="wrap_content">
  6. <LinearLayout
  7. android:layout_width="100dp"
  8. android:layout_height="wrap_content"
  9. android:background="@drawable/bg_circle_drop_down_qr_code"
  10. android:orientation="vertical"
  11. android:layout_marginRight="@dimen/padding_10"
  12. android:paddingBottom="0dp"
  13. android:paddingLeft="@dimen/padding_5"
  14. android:paddingRight="@dimen/padding_5"
  15. android:paddingTop="@dimen/padding_5">
  16.  
  17. <LinearLayout
  18. android:id="@+id/lin_scan_qr_code"
  19. android:layout_width="match_parent"
  20. android:layout_height="0dp"
  21. android:layout_weight="1"
  22. android:gravity="center"
  23. android:orientation="horizontal"
  24. android:paddingBottom="@dimen/padding_5"
  25. android:paddingTop="@dimen/padding_5">
  26.  
  27. <ImageView
  28. android:layout_width="wrap_content"
  29. android:layout_height="wrap_content"
  30. android:src="@drawable/ic_circle_scan_qr_code" />
  31.  
  32. <TextView
  33. android:layout_width="wrap_content"
  34. android:layout_height="wrap_content"
  35. android:layout_marginLeft="@dimen/padding_10"
  36. android:gravity="center"
  37. android:text="扫一扫"
  38. android:textColor="@color/color_white"
  39. android:textSize="@dimen/text_16" />
  40. </LinearLayout>
  41.  
  42. <View
  43. android:layout_width="wrap_content"
  44. android:layout_height="1px"
  45. android:layout_marginLeft="@dimen/padding_3"
  46. android:layout_marginRight="@dimen/padding_3"
  47. android:background="@color/color_white" />
  48.  
  49. <LinearLayout
  50. android:id="@+id/lin_my_qr_code"
  51. android:layout_width="match_parent"
  52. android:layout_height="0dp"
  53. android:layout_weight="1"
  54. android:gravity="center"
  55. android:orientation="horizontal"
  56. android:paddingBottom="@dimen/padding_5"
  57. android:paddingTop="@dimen/padding_5">
  58.  
  59. <ImageView
  60. android:layout_width="wrap_content"
  61. android:layout_height="wrap_content"
  62. android:src="@drawable/ic_circle_my_qr_code" />
  63.  
  64. <TextView
  65. android:layout_width="wrap_content"
  66. android:layout_height="wrap_content"
  67. android:layout_marginLeft="@dimen/padding_10"
  68. android:gravity="center"
  69. android:text="二维码"
  70. android:textColor="@color/color_white"
  71. android:textSize="@dimen/text_16" />
  72. </LinearLayout>
  73. </LinearLayout>
  74. </LinearLayout>

第二步,在代码中定义popwindow样式,绑定点击事件,代码如下:

  1. // // 获取自定义布局文件pop.xml的视图
  2. View customView = getActivity().getLayoutInflater().inflate(R.layout.lay_circle_pop_drop_down_qr_code,
  3. null, false);
  4. // 创建PopupWindow实例,200,150分别是宽度和高度
  5.  
  6. mQrCodePopWindow = new PopupWindow(customView, CommonUtil.dipToPx(getContext(),110), ViewGroup.LayoutParams.WRAP_CONTENT,true);
  7. // 设置动画效果 [R.style.AnimationFade 是自己事先定义好的]
  8. // popupwindow.setAnimationStyle(R.style.AnimationFade);
  9. // popupwindow.setTouchable(true);
  10. // popupwindow.setOutsideTouchable(true);
  11. mQrCodePopWindow.setBackgroundDrawable(new BitmapDrawable());
  12. customView.findViewById(R.id.lin_scan_qr_code).setOnClickListener(v -> {
  13. ToastUtil.show(getContext(),"扫一扫");
  14. dismissQrCodePopWindow();
  15. });
  16. customView.findViewById(R.id.lin_my_qr_code).setOnClickListener(v -> ToastUtil.show(getContext(),"二维码"));

注意,代码中的true为setFoucusable,如要点击空白处隐藏popwindow的话,setFocusable(true)和setBackground()两者必不可少(亲测)。

最后,为空间添加点击事件,控制下拉框的显示隐藏,代码如下:

  1. @OnClick(R.id.lin_top_right)
  2. public void onClick(View v) {
  3. if (mQrCodePopWindow != null&& mQrCodePopWindow.isShowing()) {
  4. mQrCodePopWindow.dismiss();
  5. } else {
  6. initQrCodePopWindow();
  7. mQrCodePopWindow.showAsDropDown(v);
  8. }
  9. }

(由于暂时没有发现好的动画效果,所以没有添加动画,如果大家有发现好的动画,还请告知一二,在此谢过)

效果图:

用PopupWindow做下拉框的更多相关文章

  1. 用PopWindow做下拉框

    最近在做下拉框,本来想用spinner,可是spinner达不到项目要求,跟同学同事问了一圈,都在用popwindow, 网上看了一下,popwindow挺简单的,可定制性挺强的,符合我的要求,所以, ...

  2. C# 生成月份及天选择列表,方便做下拉框联动

    月份及天选择列表,很方便做下拉框联动 /// <summary> /// 获取月份选择列表(根据当前语言环境显示月份名称) /// </summary> private IEn ...

  3. GridControl控件绑定RepositoryItemImageComboBox 作为下拉框使用

    如果,时间长时了,已前做过的东西,都记不得了,所以记录一下. 废话不多说. 1.拖出gridview控件,然后将字段绑定上去 2.将要做下拉框的控件加入RepositoryItemImageCombo ...

  4. devpress GridControl控件绑定RepositoryItemImageComboBox 作为下拉框使用 zt

    1.拖出gridview控件,然后将字段绑定上去 2.将要做下拉框的控件加入RepositoryItemImageComboBox控件 3.绑定数据 ; i < ; i++) { //如果取值时 ...

  5. 月薪10K必备--C#下拉框联动

                   下拉框联动 很多网站上都用到下拉框联动,就是第一个下拉框没有选择任何项,第二个下拉框就没有选项.这样的做法更加谨慎,更加紧密. 下面我就教大家怎么做下拉框联动: 首先在窗 ...

  6. Ext 下拉框联动第一次显示不正常的问题

    做下拉框联动,异步加载数据,第一次显示时数据不准确,不要在combo_2的下拉框直接绑定store,在combo_1的改变事件里调用下面的方法 function GetAllCustomerBrand ...

  7. 下拉框选择blur与click冲突问题

    缘由:今天在做下拉框选择时,遇到click和blur冲突问题:具体现象如下 1.intput框获取焦点(focus事件)时显示隐藏的下拉框,失去焦点(blur事件)则隐藏下拉框 2.点击选择(clic ...

  8. easyui datagrid combobox下拉框获取数据问题

    最近在使用easyui的datagrid,在可编辑表格中添加一个下拉框,查了下API,可以设置type : 'combobox',来做下拉框,这下拉框是有了,可是这后台数据怎么传过来呢,通过查API可 ...

  9. PHP.TP框架下商品项目的优化3-php封装下拉框函数

    php封装下拉框函数 因为在项目中会经常使用到下拉框,所以根据一个表中的数据制作下拉框函数,以便调用 //使用一个表的数据做下拉框函数 function buildSelect($tableName, ...

随机推荐

  1. public static void main(String[] args)说明

    /*public static void main(String[] args) 主函数特殊之处:1,格式是固定的.2,被jvm所识别和调用. public:因为权限必须是最大的.static:不需要 ...

  2. 状态机中的RAM注意的问题--减少扇出的办法

    可能我不会抓紧时间,所以做事老是很慢.最近在整维特比译码过程深感自己有这样的毛病. 每天会有一点进展,但是却是一天的时间,感觉别人都做起事情来很快.可能这个东西有点难,做 不做得出来都不要紧,但我的想 ...

  3. VHDL数据类型

    VHDL表示16进制 如 a : std_logic_vector(7 downto 0) 把0x55赋给a a <= x"55"; b表示二进制 b“1011_1111” ...

  4. ROS教程

    Learning ROS 学习ROS Depending on your learning style and preferences, you can take two approaches to ...

  5. 20145234黄斐《java程序设计》第六周

    教材学习内容总结 第十章:输入与输出 InputStream与OutputStream 流(Stream)是对「输入输出」的抽象,注意「输入输出」是相对程序而言的 InputStream与Output ...

  6. AOT和JIT以及混合编译的区别、优劣

    AOT,JIT是什么? JIT,即Just-in-time,动态(即时)编译,边运行边编译: AOT,Ahead Of Time,指运行前编译,是两种程序的编译方式 区别 这两种编译方式的主要区别在于 ...

  7. 图片转化为pdf(转)

    方法1: 利用Adobe公司的Adobe Acrobat Professional进行转化.注意,一定是Professional版本的,Reader版本没有这个功能.  首先安装Adobe Acrob ...

  8. jpg/png格式图片转eps格式的方法--latex自带命令bmeps

    bmeps -h 命令查看bmeps的帮助信息 bmeps -c example.jpg example.eps

  9. 获得硬盘的ID序列号(XE10.1+WIN8.1)

    疯狂delphi DelphiXE公开课群:100162924.58593121 朱建强QQ:513187410 获得硬盘的ID序列号(XE10.1+WIN8.1) 相关资料: https://zhi ...

  10. Django开发Web监控工具-pyDash

      今天发现了一个比较有意思的监控工具,是基于Django开发的,开发大牛已经开放了源代码,向大牛致敬,同时研究研究,目前感觉这个监控比较直观,可以针对个人服务器使用,同时涉及的环境比较简单,部署起来 ...