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的更多相关文章

  1. Swift实现封装PopMenu菜单,可在屏幕任意位置弹出

    效果图: 说明: 代码现已支持 Swift3 语法 使用介绍: 1.初始化位置 //frame 为整个popview相对整个屏幕的位置 箭头距离右边位置,默认15 //popMenu = SwiftP ...

  2. C++ Button右键弹出式菜单

    Button右键弹出式菜单 关键点 用类来实现 的 实现过程 新建1个类  类名CButtonPopMenu 基类CButton 新建1个菜单资源 IDR_MENU1 // ButtonPopMenu ...

  3. pb popmenu弹出式选单位置的问题

    在主界面上使用m_main.m_title.PopMenu(PointX(),PointY()),可以正确定位弹出式选单的位置: 在主界面的控件智商为使用m_main.m_title.PopMenu( ...

  4. Android学习总结——Popup menu:弹出式菜单

    PopupMenu,弹出菜单,一个模态形式展示的弹出风格的菜单,绑在在某个View上,一般出现在被绑定的View的下方(如果下方有空间). 注意:弹出菜单是在API 11和更高版本上才有效的. 核心步 ...

  5. 手动添加PopMenu出现的问题

    最近在github上找了个比较酷的弹出菜单PopMenu用来做分享页面,demo下载运行OK,于是拖进项目中,一编译就呵呵了.... 一看demo目录,原来这还还引用了其他库,于是把pod下面的pop ...

  6. 弹出式菜单(下拉菜单)实现——PopupMenu

    PopupMenu代表弹出式菜单,它会在指定组件上弹出PopupMenu,默认情况下,PopupMenu会显示在该组件的下方或上方.PopupMenu可增加多个菜单项,并可为菜单项增加子菜单. 使用P ...

  7. 使用PopupMenu创建弹出式菜单

    PopupMenu代表弹出式菜单,它会在指定组件上弹出PopupMenu,默认情况下,PopupMenu会显示在该组件的下方或上方.PopupMenu可增加多个菜单项,并可为菜单项增加子菜单. 使用P ...

  8. css3动画:弹出式菜单

    css3动画:弹出式菜单 今天主要来讲讲transition和transform结合做的动画,会举一些现在(2017年)常见的动画例子. 注:本人也接触css3不久,如果写的有纰漏请指出,不喜勿喷. ...

  9. 高级组件——弹出式菜单JPopupMenu

    弹出式菜单JPopupMenu,需要用到鼠标事件.MouseListener必须要实现所有接口,MouseAdapter是类,只写你关心的方法,即MouseAdapter实现了MouseListene ...

随机推荐

  1. python语言学习6——python基础

    Python是一种计算机编程语言. 以#开头的语句是注释,注释是给人看的,可以是任意内容 其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块. Python程序是大小写敏感的,如果写错 ...

  2. Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)(转)

    互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...

  3. [置顶] android系统功能调用大全

    1.从google搜索内容  Intent intent = new Intent();  intent.setAction(Intent.ACTION_WEB_SEARCH);  intent.pu ...

  4. Kafka - SQL 引擎

    Kafka - SQL 引擎分享 1.概述 大多数情况下,我们使用 Kafka 只是作为消息处理.在有些情况下,我们需要多次读取 Kafka 集群中的数据.当然,我们可以通过调用 Kafka 的 AP ...

  5. web框架之Spring-MVC环境搭建(转)

    spring框架jar包 1.下载spring源包spring地址:http://www.springsource.org/download我下的是spring-framework-3.1.0.REL ...

  6. 低版本的 opencv库的 vs2010 打开 高版本opencv

    打开track.vcxproj文件, 注释掉跟版本有关的行就可. 本例子中,当用双击.sln用vs2010打开高版本的opencv项目时,会出现错误, 并且会有错误信息提示,双击该错误信息,就会打开该 ...

  7. Resource temporarily unavailable用户的连接数设置的太小

    -bash:fork:Resource temporarily unavailable的问题   出现这个问题的原因是linux用户的连接数设置的太小,只要修改max user processes就可 ...

  8. 大话设计模式C++达到-文章12章-外观模式

    一.UML画画 关键词:添加Facade层. 二.概念 外观模式:为子系统中的一组接口提供一个一致的界面.此模式定义了一个高层接口,这个接口使得这一子系统更加easy使用. 三.说明 Q:外观模式在什 ...

  9. Akka边学边写(3)-- ByteString介绍

    Akka的IO层设计能够參考这篇文档,本文简介一下ByteString的设计. Immutable消息 Actor之间是通过消息沟通的.但为了避免同步问题,消息必须是Immutable. 因此.Akk ...

  10. Android SDK 5.0 这个语句带来折腾 - 生命在于折腾!

    Android SDK 5.0  带来的这番折腾 - 生命在于折腾! 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一 ...