弹出式菜单PopMenu
MainActivity.java
public class MainActivity extends Activity implements OnClickListener{ private PopMenu popMenu;
private Context context;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
context = MainActivity.this;
button=(Button)findViewById(R.id.bt);
button.setOnClickListener(this);
popMenu = new PopMenu(context);
popMenu.setOnItemClickListener( new OnItemClickListener() {//每个条目的点击事件
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//每个条目的点击响应事件
popMenu.dismiss();
}
} ); } // 弹出菜单监听器 @Override
public void onClick(View v) {
popMenu.showAsDropDown(v); }
}
PopMenu.java
public class PopMenu {
private ArrayList<String> itemListStr ;
private ArrayList<Integer> itemListInt;
private Context context;
private PopupWindow popupWindow;
private ListView listView; public PopMenu(Context context) {
this.context = context;
itemListStr = new ArrayList<String>();
itemListInt=new ArrayList<Integer>();
String[] str=new String[]{"你好", "我好", "大家好", "哈哈"};
int[] i=new int[]{R.drawable.picture0,R.drawable.picture1,R.drawable.picture2,R.drawable.picture3};
for(String s:str){
itemListStr.add(s);
}
for(int img:i){
Integer listImgInteger=Integer.valueOf(img);//int-->Integer
itemListInt.add(listImgInteger);
}
Log.i("Tag","itemListStr______"+itemListStr);
Log.i("Tag","itemListInt________"+itemListInt);
View view = LayoutInflater.from(context).inflate(R.layout.poplist, null);//PopupWindow里面的view
listView = (ListView) view.findViewById(R.id.menu_listview);
listView.setAdapter(new PopMenuAdapter(context,itemListStr,itemListInt)); listView.setFocusableInTouchMode(true);
listView.setFocusable(true);
popupWindow = new PopupWindow(view, 300, LayoutParams.WRAP_CONTENT);
popupWindow.setBackgroundDrawable(new BitmapDrawable()); // 这个是为了点击“返回Back”也能使其消失,并且并不会影响你的背景(很神奇的),
} // 设置每个条目击监听事件,前面会调用这个方法
public void setOnItemClickListener(OnItemClickListener listener) {
listView.setOnItemClickListener(listener);
} // 下拉式 弹出 pop菜单 parent 右下角
public void showAsDropDown(View parent) {
popupWindow.showAsDropDown(parent,-150,0);//showAsDropDown(View anchor, int xoff, int yoff)弹出对话框,位置在紧挨着view组件,x y 代表着偏移量
popupWindow.setFocusable(true);//必须要获得焦点哦,不然里面的控件啥的点击无效的哦
popupWindow.setOutsideTouchable(true);// 设置允许在外点击消失
popupWindow.update(); // 刷新状态
} // 隐藏菜单
public void dismiss() {
popupWindow.dismiss();
}
}
PopMenuAdapter.java
public class PopMenuAdapter extends BaseAdapter {
ArrayList<String> itemListS;
ArrayList<Integer> itemListI;
Context mcon;
public PopMenuAdapter(Context mcon,ArrayList<String> itemListStr,ArrayList<Integer> itemListImg){
this.mcon=mcon;
this.itemListS=itemListStr;
this.itemListI=itemListImg;
} @Override
public int getCount() {
return itemListS.size();
} @Override
public Object getItem(int position) {
return itemListS.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mcon).inflate(R.layout.showpoplist, null);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.img);
holder.groupItem = (TextView) convertView.findViewById(R.id.textview);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.imageView.setBackgroundResource(itemListI.get(position).intValue());//Integer-->int
holder.groupItem.setText(itemListS.get(position));
Log.i("Tag","itemListS.get(position)~~~~~~"+itemListS.get(position));
Log.i("Tag","itemListI.get(position).intValue()~~~~~"+itemListI.get(position).intValue());
return convertView;
} private final class ViewHolder {
ImageView imageView;
TextView groupItem;
}
}
两个布局文件,一个是PopMenu的填充的view,里面就是ListView;另一个布局文件是ListView每个条目的布局。
poplist.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingLeft="20dip"
android:gravity="right"
android:id="@+id/hotalk_menu_view_layout" >
<!-- 显示的listview -->
<ListView android:id="@+id/menu_listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:longClickable="true"
android:scrollbarSize="0sp"
android:scrollbarStyle="insideOverlay"
android:background="@drawable/menubg"
android:divider="@drawable/group_divider"
android:dividerHeight="1px"
android:cacheColorHint="#00000000">
</ListView>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
> <!-- 显示内容 ,每个条目-->
<ImageView
android:id="@+id/img"
android:layout_width="60dp"
android:layout_height="40dp"
android:layout_alignParentLeft="true"
/>
<TextView
android:id="@+id/textview"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:layout_toRightOf="@id/img"
android:layout_alignBottom="@id/img"
android:textSize="25sp"
android:textColor="#FF33CC" /> </RelativeLayout>
弹出式菜单PopMenu的更多相关文章
- Swift实现封装PopMenu菜单,可在屏幕任意位置弹出
效果图: 说明: 代码现已支持 Swift3 语法 使用介绍: 1.初始化位置 //frame 为整个popview相对整个屏幕的位置 箭头距离右边位置,默认15 //popMenu = SwiftP ...
- C++ Button右键弹出式菜单
Button右键弹出式菜单 关键点 用类来实现 的 实现过程 新建1个类 类名CButtonPopMenu 基类CButton 新建1个菜单资源 IDR_MENU1 // ButtonPopMenu ...
- pb popmenu弹出式选单位置的问题
在主界面上使用m_main.m_title.PopMenu(PointX(),PointY()),可以正确定位弹出式选单的位置: 在主界面的控件智商为使用m_main.m_title.PopMenu( ...
- Android学习总结——Popup menu:弹出式菜单
PopupMenu,弹出菜单,一个模态形式展示的弹出风格的菜单,绑在在某个View上,一般出现在被绑定的View的下方(如果下方有空间). 注意:弹出菜单是在API 11和更高版本上才有效的. 核心步 ...
- 手动添加PopMenu出现的问题
最近在github上找了个比较酷的弹出菜单PopMenu用来做分享页面,demo下载运行OK,于是拖进项目中,一编译就呵呵了.... 一看demo目录,原来这还还引用了其他库,于是把pod下面的pop ...
- 弹出式菜单(下拉菜单)实现——PopupMenu
PopupMenu代表弹出式菜单,它会在指定组件上弹出PopupMenu,默认情况下,PopupMenu会显示在该组件的下方或上方.PopupMenu可增加多个菜单项,并可为菜单项增加子菜单. 使用P ...
- 使用PopupMenu创建弹出式菜单
PopupMenu代表弹出式菜单,它会在指定组件上弹出PopupMenu,默认情况下,PopupMenu会显示在该组件的下方或上方.PopupMenu可增加多个菜单项,并可为菜单项增加子菜单. 使用P ...
- css3动画:弹出式菜单
css3动画:弹出式菜单 今天主要来讲讲transition和transform结合做的动画,会举一些现在(2017年)常见的动画例子. 注:本人也接触css3不久,如果写的有纰漏请指出,不喜勿喷. ...
- 高级组件——弹出式菜单JPopupMenu
弹出式菜单JPopupMenu,需要用到鼠标事件.MouseListener必须要实现所有接口,MouseAdapter是类,只写你关心的方法,即MouseAdapter实现了MouseListene ...
随机推荐
- Nagios监控系统的安装
环境:centOS 6.5 X86 64位 nagios-4.08 步骤: 1. 最小化安装系统 2. 修改安全特性 关闭SELINUX SELINUX=disabled 清除iptabl ...
- QT4和QT3的区别
著名的QT库前一阵子升级到4.xx版本了,我目前在开发的一个基于QT3的软件,由于受到QThread的各种困扰,因此打算尝试将代码升级到QT4, 但是当我实际开始升级工作后,才发现QT3和QT4的变化 ...
- NYOJ115 市叛乱 【SPFA】
城市平乱 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市 ...
- Entity Framework6使用SQL Server Compact免安装部署
原文:Entity Framework6使用SQL Server Compact免安装部署 使用Nuget安装以下包: EntityFramework.6.0.2 EntityFramework.Sq ...
- Golang初学者的资源整理
看了汪汪汪不是我的语言的GO语言零基础入门资料整理,个人感觉还不够全面,忍不住过来补充一些内容. 网站教程: GO语言编程 and GO语言开发2048 from 实验楼Go语言后台应用开发 form ...
- MYSQL高可用(HA)随想
记得在上一篇文章“Java集群--大型网站是怎样解决多用户高并发访问的”的结尾处本人阐述了数据库的高可用的一种方案----实现主从部署,那么今天,就让我聊聊本人关于数据库的一些所思所想吧! 下面是本人 ...
- Kendo UI开发教程(16): Kendo MVVM 数据绑定(五) Events
本篇和Kendo UI开发教程(14): Kendo MVVM 数据绑定(三) Click类似,为事件绑定的一般形式.Events绑定支持将ViewModel的方法绑定到DOM元素的事件处理(如鼠标事 ...
- Nagios经check_http监视web申请书server多个tomcat维修
怎么样nagios显示器tomcat,它是一个相对简单的和复杂的事情.简单是因为,只有监控的假设web应用服务器tomcat无论是服务正常进行,很简单.假设你要监视tomcat其他例子,例如连接数jv ...
- Codeforces Round#297 div2
B: 题意:给定一个字符串,然后给定m个数字 对于每个数字ai的含义是,将ai到n-ai+1的字符串给翻转一遍. 要求输出m次翻转之后的字符串. 想法就是判断第i个位置的字符是翻转了奇数次,还是偶数次 ...
- Oracle SQL Lesson (7) - 使用子查询
使用子查询简单子查询SELECT select_listFROM tableWHERE expr operator (SELECT select_list FROM table);子查询可以出现在se ...