PopWindow是Android开发中常见的控件,至于PopWindow是什么道长就不在这里安利了,这里道长说一下PopWindoiw的常见的使用方式,不过道长还是没有动图。

一、基本使用

  • 创建一个PopWindow对象
  // 创建一个PopupWindow对象// 设置PopupWindow要显示的内容ListView contentView = createListView();// 设置PopupWindow的宽int width = et_number.getWidth();// 设置PopupWindow的高int height = 500;// 设置PopupWindow是否可以获取焦点boolean focusable = true;popupWindow = new PopupWindow(contentView, width, height, focusable);

这里PopWindow要显示的对象代码如下:

private ListView createListView() {ListView listView = (ListView) View.inflate(this, R.layout.layout_number_list, null);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long arg3) {String number = (String) parent.getItemAtPosition(position);et_number.setText(number);popupWindow.dismiss();}});adapter = new NumberListAdapter(HomeActivity.this,list);listView.setAdapter(adapter);return listView;}

ListView的适配器NumberListAdaper的实现代码如下:

public class NumberListAdapter extends BaseAdapter {private ArrayList<String> mLists;private Context mContext;public NumberListAdapter(Context context, ArrayList<String> list) {this.mContext = context;this.mLists = list;}@Overridepublic int getCount() {return mLists.size();}@Overridepublic Object getItem(int position) {return mLists.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = View.inflate(parent.getContext(), R.layout.item_number, null);holder = new ViewHolder();holder.tv_number = (TextView) convertView.findViewById(R.id.tv_number);holder.ib_del = (ImageView) convertView.findViewById(R.id.ib_del);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}String number = mLists.get(position);holder.tv_number.setText(number);holder.ib_del.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mLists.remove(position);notifyDataSetChanged(); // 通知ListView刷新界面}});return convertView;}static class ViewHolder {TextView tv_number;ImageView ib_del;}
}
  • 设置点击PopWindow之外弹窗消失
   // 下面的两行代码是用于实现在点PopupWindow之外的地方的时候可以隐藏PopupWindow// 设置PopupWindow的外部可以点击popupWindow.setOutsideTouchable(true);popupWindow.setBackgroundDrawable(new ColorDrawable());
  • 设置PopWindow的显示位置
        // 显示PopupWindow// 指定PopupWindow显示在哪个View的下方View anchor = et_number;// 指定PopupWindow的x方向的偏移量 xoff > 0向右偏移int xoff = 15;// 指定PopupWindow的y方向的偏移量 以et_number的底部为yoff = 0,yoff > 0向下偏移int yoff = -5;popupWindow.showAsDropDown(anchor, xoff, yoff);

虽然指定的PopWindow是显示在那个View的下方,但是可以通过PopWindow的偏移量来改变PopWindow的显示位置。

二、自定义PopWindow

  • 初始化构造方法
    public MenuPop(Activity context, OnClickListener onClick) {super(context);LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);view = inflater.inflate(R.layout.menu_popup, null);h = context.getWindowManager().getDefaultDisplay().getHeight();w = context.getWindowManager().getDefaultDisplay().getWidth();click = onClick;initView();initPopWindow();}
  • 初始界面
    private void initView(){tv_regulation = (TextView) view.findViewById(R.id.tv_regulation);tv_task = (TextView) view.findViewById(R.id.tv_task);tv_card = (TextView) view.findViewById(R.id.tv_card);tv_share = (TextView) view.findViewById(R.id.tv_share);tv_regulation.setBackgroundColor(Color.parseColor(tv_bgColor));tv_task.setBackgroundColor(Color.parseColor(tv_bgColor));tv_card.setBackgroundColor(Color.parseColor(tv_bgColor));tv_share.setBackgroundColor(Color.parseColor(tv_bgColor));tv_regulation.setOnClickListener(click);tv_task.setOnClickListener(click);tv_card.setOnClickListener(click);tv_share.setOnClickListener(click);}
  • 初始化PopWindow
private void initPopWindow(){this.setOutsideTouchable(false);this.setContentView(view);// 设置弹出窗体的宽this.setWidth(w);// 设置弹出窗体的高this.setHeight(LayoutParams.WRAP_CONTENT);// 设置弹出窗体可点击this.setFocusable(true);// 设置弹出窗体动画效果
//       this.setAnimationStyle(R.style.AnimTop_gradualChange);// 实例化一个ColorDrawable颜色为半透明ColorDrawable dw = new ColorDrawable(0x00FFFFFF);//设置弹出窗体的背景this.setBackgroundDrawable(dw);// mMenuView添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框
//      view.setBackgroundDrawable(new ColorDrawable());view.setOnTouchListener(new OnTouchListener() {public boolean onTouch(View v, MotionEvent event) {int height = view.findViewById(R.id.rl_competeMenu).getBottom();int y = (int) event.getY();if (event.getAction() == MotionEvent.ACTION_UP) {if (y > height) {dismiss();}}return true;}});}

这里道长又使用了另外一种方法来实现点击弹窗外,销毁弹窗。当然也可已设置弹窗的动画。
这两种方式实现的PopWindow就到这里,希望这篇博客可以给你提供一些帮助。

源码下载

PopWindowDemo


PopWindow:基本使用与自定义PopWindow相关推荐

  1. 简单自定义Popwindow,仿支付宝微信密码输入弹出框

    因APP增加了钱包功能,所以APP支付是迫在眉睫的事,市场上大多数的支付界面都是大同小异,因此写了下自定义PopupWindow,简单模仿下支付宝,本人也不常用PopupWindow,写的不好,希望大 ...

  2. Android自定义PopWindow

    我实现的效果是点击按钮 一个从底部出现popwindow的动画 窗体颜色变灰 显示recyclerview列表,以及实现类传入适配器数据和点击事件 以及点击外部隐藏popwindow 上代码: cla ...

  3. Android带三角形的弹窗,andriod开发 利用.9图制作带三角形指示的popwindow弹窗

    利用.9图做背景,配合使用popwindow和listview可以实现这个需求,也可以自定义popwindow的布局,画边框加阴影,自定义三角形的view,然后...然后我就放弃了这个思路,老老实实直 ...

  4. Android应用Activity、Dialog、PopWindow、Toast窗体加入机制及源代码分析

    [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 1 背景 之所以写这一篇博客的原因是由于之前有写过一篇<Android应用setCont ...

  5. Popwindow学习笔记

    工作中已经使用很多次popwindow了.但是一直没有好好总结,今天乘此机会把popwindow过一遍.在activity中我们可以选择使用popwindow和dialog弹出某一个小界面,但是默认情 ...

  6. Android自定义组件之ListPopWindow

    最近小编在学习IOS开发,感触颇深,看到了iOS里面封装了好多组件,很多组件都是iOS自带的,相信一般的小公司的产品经理都是按照iOS的交互来设计UI,而且还要求Android要和iOS统一风格,这让 ...

  7. popwindow 加个边框_popupWindow自定义(1)

    1.自定义布局(密码框.对话框等等) 2.从下往上弹出效果的实现 一.对话框 第一步: Xml代码: xmlns:android="http://schemas.android.com/ap ...

  8. Android自定义半透明背景弹窗非popwindow/dialog超简单任意编写!

    前日,一个朋友问我有没有好看的弹窗,功能不需要太难,说了一点需求,图: 然后我就写了个Demo给他. Activity的弹窗各种各样.很早就有,但是有的太过于单调,样式也不好看,有的自定义起来非常繁琐 ...

  9. 超级实用且不花哨的js代码大全

    事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();   event.src ...

  10. kotlin开发经验谈3

    看到标题应该很让人疑惑,怎么没有2,2这篇一直还在写,可是写不下去,只能先挖个坑了. 这篇讲的是 Kotlin Android Extensions 直接生成对应的 View 作为属性碰到的问题 fr ...

最新文章

  1. 大话设计模式笔记(七)の原型模式
  2. IDEA中添加类的创建者信息
  3. AI入门:无门槛可以玩的神经网络
  4. qt中设置QCheckBox的文本与勾选框之间的距离
  5. windows Secure CRT使用SSH访问Linux服务器被拒绝,winscp访问Linux服务器被拒绝
  6. jQuery图片延迟加载插件jQuery.lazyload
  7. pads9.5 (PCB design)
  8. MySQL管理之 MyISAM和InnoDB存储引擎简单对比
  9. 右手螺旋判断磁感应强度方向_弹簧左旋or右旋在功能和应用上有什么区别,如何判断左旋还是右旋...
  10. C++ Boost库 多线程 线程锁mutex lock_guard 、unique_lock、upgrade_lock、upgrade_to_unique_lock实例
  11. 墨卡托投影和高斯-克吕格 (Gauss-Krüger) 投影
  12. 利用Python批量把flv文件转换成mp4文件
  13. 如何使用文件保险箱加密 Mac 上的启动磁盘?
  14. html调用js自动播放音乐,使用html js实现点击文本和播放音乐的功能
  15. 眼底图像血管增强与分割--(5)基于Hessian矩阵的Frangi滤波算法
  16. 使用GridView使用类似电影海报宣传页面
  17. python另存为对话框_“另存为文件”对话框如何不允许覆盖
  18. 动画和漫画里ed、op、OVA、ost、bl、gl是什么意思?
  19. 什么是mes?它的功能有哪些?
  20. IDG刘雨坤:关于SaaS业务七点经验

热门文章

  1. 五大傻瓜式移动应用开发工具
  2. android 获取设备的serialNumber和Mac地址
  3. 购物网站的设计与实现论文
  4. 【数学建模】2 TOPSIS优劣解距离法
  5. 农行研发中心软开2020秋招编程题全记录
  6. 软件测试技术——覆盖方法介绍
  7. verlay虚拟化技术_Overlay解决虚拟化难题 - 节点动态 - 海南师范大学信息网络与数据中心| Network Center HaiNan Normal University...
  8. SE壳破解 ---- QQ空间最近访客提取,2012-豆豆营销 等软件
  9. 计算机初始《wps表格》教案,wps教案
  10. 想创业做社交产品?不妨先看看这篇文章