自定义PopupWindow全解
干货开始:
第一步:
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全解相关推荐
- 安卓自定义view全解:初始化,onDraw函数,onMeasure函数,用户手势事件
全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓自定义view全解. view类包含如下函数.可供重写. onFinishInflate() 回调方法,当应用从XML加载该组件并用它构建界面之后 ...
- Android自定义View全解
目录 目录.png 1. 自定义View基础 1.1 分类 自定义View的实现方式有以下几种 类型 定义 自定义组合控件 多个控件组合成为一个新的控件,方便多处复用 继承系统View控件 继承自Te ...
- 学习TeXworks编辑器(二)TAB补全详解与自定义补全命令总结
文章目录 写在前面 内置补全命令及记忆 希腊字母的补全 规则 对应表 小写希腊字母 大写希腊字母 作为变量的希腊字母 常用数学命令(字体)的补全 常用环境的补全 自定义补全命令 结语 参考文献 写在前 ...
- 安卓自定义相机拍照功能全解(不调用系统相机)
全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓实现一个相机的基本功能. 启动和释放相机 由于拍照功能一般需要实时预览,所以比较耗电,因此在窗口的恢复和暂停函数中需要启动和释放相机 privat ...
- Gavin老师Transformer直播课感悟 - Rasa对话机器人项目实战之教育领域Education Bot项目Form解析及自定义全解(七十五)
本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot项目关于Form的定义,如何激活一个form或者使当前运行的form进入不激活状态,如何在 ...
- 安卓自定义相机录像功能全解(不调用系统相机)
全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓录制视频需要使用MediaRecorder来完成.并且在录制中一般还需要SurfaceHolder进行实时预览,所以在布局文件中进行预览的Surf ...
- Java IO编程全解(五)——AIO编程
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7794151.html 前面讲到:Java IO编程全解(四)--NIO编程 NIO2.0引入了新的异步通道的 ...
- mapper命名规范_Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...
- 跨行合并居中html标记语言,[前端Web]HTML语法最全解-建议收藏
原标题:[前端Web]HTML语法最全解-建议收藏 1. 标签全解 1.1 文件标记 作用:文档声明标签.定义该文档是html5的文档,位于标签前面 详解: HTML总共有很多的版本,那么浏览器怎么知 ...
最新文章
- hibernate 逆向工程
- win32异常处理函数
- asp.net 中 SESSION和COOKIE的使用
- Spark MaprLab-Auction Data分析
- java学习(78):GUL拆分窗口
- java 布局实例,HarmonyOS Java UI之StackLayout布局示例
- Ubuntu 16.04 安装Go 1.9.2
- 分治法:归并排序求逆序对
- camera ---(6)双摄成像原理
- Single Image Haze Removal Using Dark Channel Prior(使用暗通道先验去除单张图像雾霾)
- (附源码)springboot校园购物网站 毕业设计 041037
- Hello,Bada!
- 关于达芬奇调色台的那些事儿
- 周报格式(sohu)
- 混凝土试块送检要求与时间
- adobe cs5 indesign 不显示文本框_Adobe CS5 InDesign自动添加页码
- mysql查询性别语句_MySQL查询语句简单操作示例
- 从「裁员无赔偿」到「拿到n+1」,看的我热血沸腾,我都想离职了
- 多暂估的库存如何调整_去年暂估的库存如何在今年做冲销
- Linux yum安装Mysql5.7