关闭

Android中弹出菜单PopupWindow的使用

标签: android
557人阅读 评论(0) 收藏 举报

Android中,使用手指触摸,不能像电脑一样有鼠标左键和右键,所以会有一个PopupWindow来代替鼠标右键。当用户点击的时候出现一个弹出的窗口与用户交流信息。好了,现在就开始介绍PopupWindow的用法。

首先声明一个PopupWindow的对象

PopupWindow  pop=null;

初始化pop

pop=new PopupWindow(v,ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);

第一个参数是要在PopupWindow中显示的的View,第二个参数是PopupWindow的宽,我设置的是与其父窗口一样宽,第三个参数是PopupWindow的高度,我设置的是包含它里面的类容。

我们需要在PopupWindow中设置什么样的类容根据需要,我设置的是几个Button,从xml文件中解析出来的

LayoutInflater l=LayoutInflater.from(this);

 View v=l.inflate(R.layout.popup, null);

当用户点击按钮的时候就让PopupWindow显示出来

@Override
public void onClick(View v) {
pop.showAsDropDown(button);

}

这时候PopupWindow就显示在指定

showAsDropDown(View  anchor)
anchor的左下方。

当我们不需要PopupWindow的时候调用

pop.dismiss();


另外PopupWindow显示的时候可以用showAtLocation()方法


void android.widget.PopupWindow.showAtLocation(View parent, int gravity, int x, int y)

parent a parent view to get the android.view.View.getWindowToken() token from
gravity the gravity which controls the placement of the popup window
x the popup's x location offset
y the popup's y location offset

第一个参数是要将PopupWindow放到的View,第二个参数是位置,第三第四是偏移值

pop.showAtLocation(WorkPopUpTestActivity.this.ll, Gravity.BOTTOM, 0, 0);

如果是这样的话,就将PopupWindow放到了View的左下角。


最后注意:只有当View加载完成之后才能显示PopupWindow,如果View没有加载完成就加载的话会不成功。

判断View是否加载完成可以判断其宽度是否为为其0,若否,则加载完成。然后我们再加载PopupWindow。这里可以用Handler来实现。

  1. <span style="font-size:18px;">@Override  
  2.     public void run() {  
  3.         // TODO Auto-generated method stub  
  4.         boolean b=true;  
  5.         while(b)  
  6.         {  
  7.             try {  
  8.                 Thread.sleep(5);  
  9.             } catch (InterruptedException e) {  
  10.                 // TODO Auto-generated catch block  
  11.                 e.printStackTrace();  
  12.             }  
  13.             if(ll!=null)  
  14.             {  
  15.                 if(ll.getWidth()!=0)  
  16.                 {  
  17.                     hand.sendEmptyMessage(0);  
  18.                     b=false;  
  19.                 }  
  20.             }  
  21.               
  22.               
  23.         }  
  24.           
  25.     }</span>  
如果加载完成就发送消息。在Handler的handleMessage中处理消息。代码如下

  1. Handler hand=new Handler()  
  2.     {  
  3.   
  4.         @Override  
  5.         public void handleMessage(Message msg) {  
  6.             // TODO Auto-generated method stub  
  7.             super.handleMessage(msg);  
  8.             pop.showAtLocation(WorkPopUpTestActivity.this.ll, Gravity.BOTTOM, 0, 0);  
  9.               
  10.         }  
  11.           
  12.     };  
handleMessage中显示PopupWindow。
0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:98745次
    • 积分:2974
    • 等级:
    • 排名:第11761名
    • 原创:208篇
    • 转载:14篇
    • 译文:0篇
    • 评论:5条
    最新评论