服务器之家

服务器之家 > 正文

Android编程之ICS式下拉菜单PopupWindow实现方法详解(附源码下载)

时间:2021-04-22 17:22     来源/作者:天使之翼

本文实例讲述了android编程之ics式下拉菜单popupwindow实现方法。分享给大家供大家参考,具体如下:

运行效果截图如下:

Android编程之ICS式下拉菜单PopupWindow实现方法详解(附源码下载)

右边这个就是下拉菜单啦,看见有的地方叫他 ics式下拉菜单,哎哟,不错哦!

下面先讲一下实现原理:

这种菜单实际上就是一个弹出式的菜单,于是我们想到android popupwindow 类,给他设置一个view 在弹出来不就ok了吗。

popupwindow 的用法也很简单

主要方法:

步骤1.new 一个实例出来,我们使用这个构造方法即可,

复制代码 代码如下:
public popupwindow (view contentview, int width, int height)


3个参数 你要显示的view,显示宽度,显示高度
使用实例:

 

?
1
2
view view = layoutinflater.from(context).inflate(r.layout.popmenu, null);
popupwindow = new popupwindow(view, 100, layoutparams.wrap_content);

很简单吧,不用多说,如果你这2句看不懂先看下基础去咯。

步骤2:显示出来

复制代码 代码如下:
popupwindow.showasdropdown(parent,10, 10);


参数:附着在哪个view(应该是根据这个parent来确定弹出位置),相对于parent的x轴偏移 ,相对于parent的y轴偏移

 

这2个步骤就可以吧他弹出来,下面注意几个很重要的细节

注意下面所做的3条是为了使 点击popuwindow 以外的区域能够关闭它。

?
1
2
3
4
5
6
// 使其聚集
popupwindow.setfocusable(true);
// 设置允许在外点击消失
popupwindow.setoutsidetouchable(true);
//刷新状态(必须刷新否则无效)
popupwindow.update();

下面这点是为了使 按返回按钮能够关闭popuwindow

?
1
2
3
// 这个是为了点击“返回back”也能使其消失,并且并不会影响你的背景(很神奇的)
popupwindow.setbackgrounddrawable(new bitmapdrawable());
//网上找的我也不知道为什么

ok上面就介绍完了使用原理,知道了原理大家就可以自己做弹出菜单了对吧。

下面给大家分享我封装好的 popmenu 类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package com.tszy.wight;
import java.util.arraylist;
import android.content.context;
import android.graphics.drawable.bitmapdrawable;
import android.view.layoutinflater;
import android.view.view;
import android.view.viewgroup;
import android.view.viewgroup.layoutparams;
import android.widget.adapterview.onitemclicklistener;
import android.widget.baseadapter;
import android.widget.listview;
import android.widget.popupwindow;
import android.widget.textview;
import com.tszy.watergate.r;
public class popmenu {
 private arraylist<string> itemlist;
 private context context;
 private popupwindow popupwindow ;
 private listview listview;
 //private onitemclicklistener listener;
 public popmenu(context context) {
  // todo auto-generated constructor stub
  this.context = context;
  itemlist = new arraylist<string>(5);
  view view = layoutinflater.from(context).inflate(r.layout.popmenu, null);
  //设置 listview
  listview = (listview)view.findviewbyid(r.id.listview);
  listview.setadapter(new popadapter());
  popupwindow = new popupwindow(view, 100, layoutparams.wrap_content);
  popupwindow = new popupwindow(view,
    context.getresources().getdimensionpixelsize(r.dimen.popmenu_width),
    layoutparams.wrap_content);
  // 这个是为了点击“返回back”也能使其消失,并且并不会影响你的背景(很神奇的)
  popupwindow.setbackgrounddrawable(new bitmapdrawable());
 }
 //设置菜单项点击监听器
 public void setonitemclicklistener(onitemclicklistener listener) {
  //this.listener = listener;
  listview.setonitemclicklistener(listener);
 }
 //批量添加菜单项
 public void additems(string[] items) {
  for (string s : items)
   itemlist.add(s);
 }
 //单个添加菜单项
 public void additem(string item) {
  itemlist.add(item);
 }
 //下拉式 弹出 pop菜单 parent 右下角
 public void showasdropdown(view parent) {
  popupwindow.showasdropdown(parent, 10,
    //保证尺寸是根据屏幕像素密度来的
    context.getresources().getdimensionpixelsize(r.dimen.popmenu_yoff));
  // 使其聚集
  popupwindow.setfocusable(true);
  // 设置允许在外点击消失
  popupwindow.setoutsidetouchable(true);
  //刷新状态
  popupwindow.update();
 }
 //隐藏菜单
 public void dismiss() {
  popupwindow.dismiss();
 }
 // 适配器
 private final class popadapter extends baseadapter {
  @override
  public int getcount() {
   // todo auto-generated method stub
   return itemlist.size();
  }
  @override
  public object getitem(int position) {
   // todo auto-generated method stub
   return itemlist.get(position);
  }
  @override
  public long getitemid(int position) {
   // todo auto-generated method stub
   return position;
  }
  @override
  public view getview(int position, view convertview, viewgroup parent) {
   // todo auto-generated method stub
   viewholder holder;
   if (convertview == null) {
    convertview = layoutinflater.from(context).inflate(r.layout.pomenu_item, null);
    holder = new viewholder();
    convertview.settag(holder);
    holder.groupitem = (textview) convertview.findviewbyid(r.id.textview);
   } else {
    holder = (viewholder) convertview.gettag();
   }
   holder.groupitem.settext(itemlist.get(position));
   return convertview;
  }
  private final class viewholder {
   textview groupitem;
  }
 }
}

这个类里面引用到很多资源文件,布局文件,这些大家可以自己去实现,我就不贴上了。

具体代码本站下载地址如下:

项目源码

模拟服务器端源码

希望本文所述对大家android程序设计有所帮助。

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
返回顶部