弹出式菜单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 ...
随机推荐
- iOS发展 ---- 至iPhone 6自适应布局设计 Auto Layout
Apple从iOS 6增加了Auto Layout后開始就比較委婉的開始鼓舞.建议开发人员使用自适应布局,可是到眼下为止,我感觉大多数开发人员一直在回避这个问题,无论是不是因为历史原因造成的,至少他们 ...
- Qrcode生成二维码支持中文,带图片,带文字
1.下载Qrcode库源码, 下载地址:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library2.打开源码时, 部分类 ...
- jQuery Easy UI Droppable(放置)组件
Droppable(放置)组件也是一个基本组件,使用方法较简单,语法都在样例里面凝视了: 演示样例: <!DOCTYPE html> <html> <head> & ...
- ORA-12520错误解决一则
问题描写叙述: 今天突然发现连接数据库时报错,用pl/sql dev连接数据时,有时能连接上,有时连接时报: ORA-12520: TNS: 监听程序无法找到须要的server类型的可用句柄 通过se ...
- Linux 远程查看tomcat控制台
我现在只说如何看远程的tomcat控制台命令. 用远程登陆客户端登陆linux进入tomcat/logs/文件夹下键入指令:tail -f catalina.out ctrl + c 退出 这样就可 ...
- 共同发展一个以上的开发者账户多台电脑 证书 p12 型材 进出口
1:导出相应的开发人员证书的配置文件. 2:依据相应的app id 创建配置文件. 3:打开钥匙串,把你的公布证书导出p12文件. 4:用开发人员账号导出developerprofile文件. 5:把 ...
- SSL与TLS的区别以及介绍(转)
SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密性,以实现客户 ...
- Jsoup 抓取和数据页 认识HTTP头
推荐一本书:黑客攻防技术宝典.Web实战篇 : 顺便留下一个疑问:能否通过jsoup大量并发訪问web或者小型域名server,使其瘫痪?其有用jsoup熟悉的朋友能够用它解析url来干 ...
- QVector<QString> 显示器里面的动态数组元素QString和char *转变
QVector类是一类提供了动态数组模板. QVector<T>是Qt普通容器类的一种. 它将自己的每个对象存储在连续的内存中.能够使用索引號来高速訪问它们.QList<T>. ...
- android的ViewPager和Animation有些使用(二)
Animation部分 android的animation分scale,rotate,tranlateAnimation,alpha这些类型的 start animation这里有几种方法: < ...