干货开始:

第一步:

private PopupWindow windowpx,

定义全局PupupWindow。

第二步:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="vertical">
    <View
        android:layout_width="match_parent"
        android:layout_height="2px"
        android:background="@color/background" />
    <TextView
        android:id="@+id/poppaixu_jiangxu"
        android:layout_width="match_parent"
        android:layout_height="80px"
        android:gravity="center"
        android:text="价格从高到低"
        android:textColor="#333333"
        android:textSize="28px"></TextView>

    <View
        android:layout_width="match_parent"
        android:layout_height="2px"
        android:background="@color/background" />

    <TextView
        android:id="@+id/poppaixu_shengxu"
        android:layout_width="match_parent"
        android:layout_height="80px"
        android:gravity="center"
        android:text="价格从低到高"
        android:textColor="#333333"
        android:textSize="28px"></TextView>

    <View
        android:layout_width="match_parent"
        android:layout_height="2px"
        android:background="@color/background" />

    <TextView
        android:id="@+id/poppaixu_xiaoliang"
        android:layout_width="match_parent"
        android:layout_height="80px"
        android:gravity="center"
        android:text="销量排行"
        android:textColor="#333333"
        android:textSize="28px"></TextView>
    <View
        android:layout_width="match_parent"
        android:layout_height="2px"
        android:background="@color/background" />
</LinearLayout>

自定义xml。

注意:因为我用的AutoUtils用来做屏幕适配,所以自己定义的时候使用dp为单位。

第三步:

//控件下方弹出窗口
private void showPXPopupWindow(View view1) {//自定义布局,显示内容
    View view = LayoutInflater.from(GoodsListActivity.this).inflate(R.layout.popop_paixu, null);
    final TextView jiangxu = (TextView) view.findViewById(R.id.poppaixu_jiangxu);
    jiangxu.setOnClickListener(new View.OnClickListener() {@Override
        public void onClick(View v) {clearView();
            paixuTv.setTextColor(Color.parseColor("#e50b0b"));
            paixuImg.setImageResource(R.drawable.shengxu);
            paixuTv.setText(jiangxu.getText().toString().trim());
            windowpx.dismiss();
            orderBy = 1;
            initData(page);
        }});
    final TextView shengxu = (TextView) view.findViewById(R.id.poppaixu_shengxu);
    shengxu.setOnClickListener(new View.OnClickListener() {@Override
        public void onClick(View v) {clearView();
            paixuTv.setTextColor(Color.parseColor("#e50b0b"));
            paixuImg.setImageResource(R.drawable.jiangxu);
            paixuTv.setText(shengxu.getText().toString().trim());
            windowpx.dismiss();
            orderBy = 2;
            initData(page);
        }});
    final TextView xiaoliang = (TextView) view.findViewById(R.id.poppaixu_xiaoliang);
    xiaoliang.setOnClickListener(new View.OnClickListener() {@Override
        public void onClick(View v) {clearView();
            paixuTv.setTextColor(Color.parseColor("#e50b0b"));
            paixuImg.setImageResource(R.drawable.shengxu);
            paixuTv.setText(xiaoliang.getText().toString().trim());
            windowpx.dismiss();
            orderBy = 3;
            initData(page);
        }});
    AutoUtils.auto(view);
    windowpx = new PopupWindow(view, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT, true);

    windowpx.setTouchable(true);
    windowpx.setTouchInterceptor(new View.OnTouchListener() {@Override
        public boolean onTouch(View v, MotionEvent event) {return false;
            //这里如果返回true的话,touch事件将被拦截
            //拦截后 PoppWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss
        }});

    //(注意一下!!)如果不设置popupWindow的背景,无论是点击外部区域还是Back键都无法弹框
    windowpx.setBackgroundDrawable(getResources().getDrawable(R.drawable.white));

    windowpx.showAsDropDown(view1);

}

添加显示方法,

其中传入的参数View1为popup要显示在该控件的下方。

注意:

1、因为我用的AutoUtils用来做屏幕适配,你如果不需要

AutoUtils.auto(view);

第三步中的这段代码可以删除。

2、

//(注意一下!!)如果不设置popupWindow的背景,无论是点击外部区域还是Back键都无法弹框
    windowpx.setBackgroundDrawable(getResources().getDrawable(R.drawable.white));

这个地方,我放入的R.drawable.white我是直接放了一个白色的背景图片。你也可以让UI给你一张特别小的全透明空背景顶数。

3、onClick里面的方法自己写。

记着写windowpx.dismiss();

我里面的代码是写的当点击选中其中的排序后,上面显示区域的TextView显示成选择后的值。

4、我写的是列表固定的,有时间的话,我会整理里面放入Recyclerview用来选择的PopupWindow、其实原理都一样,只需要view.findViewById()。找出来你放到布局文件里面的Recyclerview、然后自己放适配器就行。

另外:AutoUtils终极适配方案链接

自定义PopupWindow全解相关推荐

  1. 安卓自定义view全解:初始化,onDraw函数,onMeasure函数,用户手势事件

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓自定义view全解. view类包含如下函数.可供重写. onFinishInflate() 回调方法,当应用从XML加载该组件并用它构建界面之后 ...

  2. Android自定义View全解

    目录 目录.png 1. 自定义View基础 1.1 分类 自定义View的实现方式有以下几种 类型 定义 自定义组合控件 多个控件组合成为一个新的控件,方便多处复用 继承系统View控件 继承自Te ...

  3. 学习TeXworks编辑器(二)TAB补全详解与自定义补全命令总结

    文章目录 写在前面 内置补全命令及记忆 希腊字母的补全 规则 对应表 小写希腊字母 大写希腊字母 作为变量的希腊字母 常用数学命令(字体)的补全 常用环境的补全 自定义补全命令 结语 参考文献 写在前 ...

  4. 安卓自定义相机拍照功能全解(不调用系统相机)

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓实现一个相机的基本功能. 启动和释放相机 由于拍照功能一般需要实时预览,所以比较耗电,因此在窗口的恢复和暂停函数中需要启动和释放相机 privat ...

  5. Gavin老师Transformer直播课感悟 - Rasa对话机器人项目实战之教育领域Education Bot项目Form解析及自定义全解(七十五)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot项目关于Form的定义,如何激活一个form或者使当前运行的form进入不激活状态,如何在 ...

  6. 安卓自定义相机录像功能全解(不调用系统相机)

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓录制视频需要使用MediaRecorder来完成.并且在录制中一般还需要SurfaceHolder进行实时预览,所以在布局文件中进行预览的Surf ...

  7. Java IO编程全解(五)——AIO编程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7794151.html 前面讲到:Java IO编程全解(四)--NIO编程 NIO2.0引入了新的异步通道的 ...

  8. mapper命名规范_Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  9. 跨行合并居中html标记语言,[前端Web]HTML语法最全解-建议收藏

    原标题:[前端Web]HTML语法最全解-建议收藏 1. 标签全解 1.1 文件标记 作用:文档声明标签.定义该文档是html5的文档,位于标签前面 详解: HTML总共有很多的版本,那么浏览器怎么知 ...

最新文章

  1. hibernate 逆向工程
  2. win32异常处理函数
  3. asp.net 中 SESSION和COOKIE的使用
  4. Spark MaprLab-Auction Data分析
  5. java学习(78):GUL拆分窗口
  6. java 布局实例,HarmonyOS Java UI之StackLayout布局示例
  7. Ubuntu 16.04 安装Go 1.9.2
  8. 分治法:归并排序求逆序对
  9. camera ---(6)双摄成像原理
  10. Single Image Haze Removal Using Dark Channel Prior(使用暗通道先验去除单张图像雾霾)
  11. (附源码)springboot校园购物网站 毕业设计 041037
  12. Hello,Bada!
  13. 关于达芬奇调色台的那些事儿
  14. 周报格式(sohu)
  15. 混凝土试块送检要求与时间
  16. adobe cs5 indesign 不显示文本框_Adobe CS5 InDesign自动添加页码
  17. mysql查询性别语句_MySQL查询语句简单操作示例
  18. 从「裁员无赔偿」到「拿到n+1」,看的我热血沸腾,我都想离职了
  19. 多暂估的库存如何调整_去年暂估的库存如何在今年做冲销
  20. Linux yum安装Mysql5.7

热门文章

  1. 无线通信经典文献导读
  2. 麒麟V10,CPU:ARM架构(D2000)安装QT4.15.2版本
  3. 记一次文件转码与二进制查看学习
  4. 售前工程师工作内幕揭秘:面试实战技巧
  5. 1046 划拳 (15 分)
  6. python学籍注册小程序
  7. Java:SoftReference
  8. vue移除伪元素_获取伪元素的属性和改变伪元素的属性
  9. 环境变量中的用户变量与系统变量的区别修改环境变量
  10. python爬虫(五):实战 【2. 爬创客实验室(requests + bs4)】