效果图:

布局文件, 展示列表的容器

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bgcolor"> <ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@color/White"
android:dividerHeight="1dp"
android:layout_marginTop="1dp">
</ListView>
</LinearLayout>

每一列的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/bgcolor"
>
<TextView
android:id="@+id/tvItem"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tvStars"
android:text="32宀?
android:layout_marginLeft="1dp"
android:layout_marginRight="1dp"
android:layout_marginBottom="1dp"
android:textColor="@color/bg_deep_color"
android:textSize="17sp"
android:paddingTop="5dp"
android:background="@color/White"
/> </LinearLayout>

java 代码实现popup menu的类

public class PopMenu {
private ArrayList<String> itemList;
private Context context;
private PopupWindow popupWindow ;
private ListView mLv; @SuppressWarnings("deprecation")
public PopMenu(Context context) {
this.context = context;
View view = LayoutInflater.from(context).inflate(R.layout.listview_popup_menu, null);
itemList = new ArrayList<String>();
//璁剧疆 listview
mLv = (ListView)view.findViewById(R.id.lv); mLv.setAdapter(new PopAdapter());
popupWindow = new PopupWindow(view, 200, LayoutParams.WRAP_CONTENT);
popupWindow = new PopupWindow(view, context.getResources().getDimensionPixelSize(R.dimen.popmenu_width), LayoutParams.WRAP_CONTENT);
popupWindow.setBackgroundDrawable(new BitmapDrawable()); } //璁剧疆鑿滃崟椤圭偣鍑荤洃鍚櫒
public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener listener) {
mLv.setOnItemClickListener(listener);
} //鎵归噺娣诲姞鑿滃崟椤?
public void addItems(String[] items) {
for (String s : items)
itemList.add(s);
} public void addItems(ArrayList<String> ArrList) {
// TODO Auto-generated method stub
itemList.addAll(ArrList);
} //鍗曚釜娣诲姞鑿滃崟椤?
public void addItem(String item) {
itemList.add(item);
} public Object getItem(int position) {
return itemList.get(position);
} //涓嬫媺寮?寮瑰嚭 pop鑿滃崟 parent
public void showAsDropDown(View parent) {
//淇濊瘉灏哄鏄牴鎹睆骞曞儚绱犲瘑搴︽潵鐨?
popupWindow.showAsDropDown(parent,2,0);
// 浣垮叾鑱氶泦
popupWindow.setFocusable(true);
// 璁剧疆鍏佽鍦ㄥ鐐瑰嚮娑堝け
popupWindow.setOutsideTouchable(true);
//鍒锋柊鐘舵€?
popupWindow.update();
} //闅愯棌鑿滃崟
public void dismiss() {
popupWindow.dismiss();
} // 閫傞厤鍣?
private final class PopAdapter extends BaseAdapter { public int getCount() {
return itemList.size();
} public Object getItem(int position) {
return itemList.get(position);
} public long getItemId(int position) {
return position;
} public View getView(int position, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(context).inflate(R.layout.list_item_popup_menu, null);
TextView groupItem = (TextView) convertView.findViewById(R.id.tvItem);
// TextView imgTV = (TextView) convertView.findViewById(R.id.imgTV);
// if (position == itemList.size() - 1) {
// imgTV.setVisibility(View.GONE);
// }
groupItem.setText(itemList.get(position));
return convertView;
}
}

让popup menu在适当地方展示出来的方法

mHospitalPopMenu = new PopMenu(mContext);
mHospitalPopMenu.addItems(mHospitalArrList);
mHospitalPopMenu.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView tvItem = (TextView)view.findViewById(R.id.tvItem);
mTvHospital.setText(tvItem.getText());
mHospitalPopMenu.dismiss();
}
});
mHospitalArrList = new ArrayList<String>();
String s[] = new String[]{"鍗庤タ鍖婚櫌","鎴愰兘鍐涘尯鍖婚櫌","鍥涘窛楠ㄧ鍖婚櫌"};
for (String s1: s){
mHospitalArrList.add(s1);
}
mCityPopMenu.showAsDropDown(mTvCity); //在mTvCity控件下show 弹出菜单

popup menu案例,无说明只代码的更多相关文章

  1. 实际案例:在现有代码中通过async/await实现并行

    一项新技术或者一个新特性,只有你用它解决实际问题后,才能真正体会到它的魅力,真正理解它.也期待大家能够多分享解一些解决实际问题的内容. 在我们遭遇“黑色30秒”问题的过程中,切身体会到了异步的巨大作用 ...

  2. 如何用java写出无副作用的代码

    搞java的同学们可能对无副作用这个概念比较陌生,这是函数式编程中的一个概念,无副作用的意思就是: 一个函数(java里是方法)的多次调用中,只要输入参数的值相同,输出结果的值也必然相同,并且在这个函 ...

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

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

  4. Toolbar 和 CollapsingToolbarLayout一起使用时menu item无点击反应解决办法

    昨天一直在琢磨为什么Toolbar和CollapsingToolbarLayout一起使用时menu item无点击放应的原因,后来在stackoverflow上一条回答,说可能是Toolbar的背景 ...

  5. How to easily create popup menu for DevExpress treelist z

    http://www.itjungles.com/how-to-easily-create-popup-menu-for-devexpress-treelist.html Adding popup m ...

  6. Android -- Options Menu,Context Menu,Popup Menu

    Options Menu                                                                           创建选项菜单的步骤: 1. ...

  7. 一只代码小白git托管路上的二三事

    [经验]一只代码小白git托管路上的二三事 写在前面的话 寒假的时候,娄老师给我们布置了代码托管的作业,并要求把托管地址发给学委.因假期的时候没有带电脑回家,所以只是在手机上草草注册了,也稀里糊涂就将 ...

  8. [WEB安全]无回显代码执行【转载】

    原作者:AdminTony 原文链接:http://www.admintony.com/无回显代码执行利用方法.html 在Root-Me上有一道代码执行的题目,其链接为题目链接 0x01 简介 打开 ...

  9. C# WPF抽屉效果实现(C# WPF Material Design UI: Navigation Drawer & PopUp Menu)

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...

随机推荐

  1. 廖雪峰老师Python教程读后笔记

    廖老师网站:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 花几天时间看了廖老师的 ...

  2. queue队列

    1.作用:解耦,提高效率.队列就是一个容器,一个有顺序的容器. q.queue.Queue(maxsize=3): 生成一个队列的实例,并且最多存储3个元素 q.get(item,block=Ture ...

  3. Linux查看PCIe版本及速率

    Linux查看PCIe版本及速率 PCIE有四种不同的规格,通过下图来了解下PCIE的其中2种规格 查看主板上的PCI插槽 # dmidecode | grep --color "PCI&q ...

  4. 【以前的空间】poj 2288 Islands and Bridges

    一个不错的题解 : http://blog.csdn.net/accry/article/details/6607703 这是一道状态压缩.每个点有一个值,我们最后要求一个最值sum.sum由三部分组 ...

  5. Android Canvas 绘图

    画布(Canvas)是图形编程中一个很普通的概念,通常由三个基本的绘图组件组成:       Canvas  提供了绘图方法,可以向底层的位图绘制基本图形.       Paint  也称为" ...

  6. AOJ.720 丢失的学妹

    缺失的学妹 考察点 STL MAP Time Mem Len Lang 3.81s 39.1MB 0.68K G++ 题意分析 给出妹子学号的个数n,给出n个学号,和n-1个学号,求在n学号中那个没有 ...

  7. ExtJs在页面上window再调用Window的事件处理

    今天在开发Ext的过程中遇到了一个恶心的问题,就是在ext.window页面,点击再次弹出window时,gridpanel中的store数据加载异常,不能正常被加载,会出现缓存,出现该问题,是因为w ...

  8. centos上tensorflow一键安装脚本

    鉴于tensorflow在centos上安装相当麻烦,特地制作了一个脚本方便以后移植到其它机器上,脚本含有其它python常用包: #! /bin/bash   sudo yum install -y ...

  9. 关于我之前写的修改Windows系统Dos下显示的用户名之再修改测试

    最近看到蛮多网友反映,自己修改Dos下用户名后出现了很多的问题--今天抽了时间,再次修改测试... ================= 提前说明:我自己修改了很多次没发现任何问题,<为避免修改可 ...

  10. dbms_output.put与put_line

    BEGIN DBMS_OUTPUT.ENABLE (buffer_size => NULL);--with no limit on the output. dbms_output.put('a' ...