Android开发自定义popupwindow
2015-07-13 14:23
537 查看
这段时间在工作过程了,学到了一些东西,拿来和大家分享分享。这期博客主要分三块来写,第一块是自定义popupwindow,第二块是关于adapterView,f在开发中产生的bug,第三块是近期的一些学习内容。本博客内容纯属原创,如要转载请在开头表明出处,谢谢。
自定义popupwindow
参数介绍
layoutResId表示将要inflate的整体布局
bottomViewId表示实际有控件,实际参与touch事件的布局,位于上面的布局中
animationStyleId表示对popupwindow出现时候定义的动画,一般用资源文件引用
用的时候,根据构造方法传入相关参数,然后用getmMenuView()获得这个popupwindow,在调用系统关于popupwindow的show()即可。
好了,介绍完毕。有兴趣的同学可以用一用。
2.adapterView
关于adapterView,没有太多讲述的。我们平时的listview gridview都属于adapterView。顾名思义,跟adapter有关。f在项目中,直接给gridview设置了onclicklistener,然后就崩溃了。查看logcat,发现如下。
java.lang.RuntimeException: Don’t call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
然后f debug跟了一下看到了这个方法。在adapterView的方法中有一个
so。。。我想你也看明白了,记得listview,gridview设置onItemClickListener(),或者设置onTouchListener().以前对这个没有概念,现在有了。。。(测试提了好多关于这个的bug - -)
3. 学习计划
最近想学一点自定义view配合动画的使用。例如华为手机屏幕右边小正方形往上拉时候清除内存的动画,我会考虑实现一下,写个demo。还有动态生成view以后,add到layout上时候的动画。到时候会给大家来分享哟,记得点赞,(^__^) 嘻嘻……
自定义popupwindow
public class CustomPopupwindow extends Popupwindow{ private view mMenuView; private int height; private int bottonHeight; private int left; private int right; public CustomPopupwindow(Context context,int layoutResId,int bottomViewId){ super(context); initView(context,layoutResId,buttonViewId,0); } public CustomPopupwindow(Context context,int layoutResId,int bottomViewId,int animationStyleId){ super(context); initView(context,layoutResId,buttonViewId,animationStyleId); } public View getmMenuView(){ return mMenuView; } private void initView(Context context,int layoutResId,final int bottomViewId,int animationStyleId){ mMenuView = (context.getSystemService(Context.LAYOUT_INFLATER_SERCICE)).inflate(layoutResId,null); this.setContentView(mMenuView ); this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); this.setFocusable(true); if(animationStyleId != 0){ this.setAnimationStyle(animationStyleId); }else{ //这里可以设置默认的动画,如果不设置则调用系统的默认来处理,也就没有动画显示 } //设置popupwindow半透明背景 ColorDrawable colorDrawable = new ColorDrawable(0xa0000000); this.setBackgroundDrawable(colorDrawable ); mMenuView.setOnTouchListener(new OnTouchListener(){ //判断点击的位置是否在popupwindow里面,不在就把popupwindow dismiss public boolean onTouch(View view ,MotionEvent event){ left = mMenuView.findViewById(bottomViewId).getLeft(); right = mMenuView.findViewById(bottomViewId).getRight(); height = mMenuView.findViewById(bottomViewId).getTop(); bottonHeight = mMenuView.findViewById(bottomViewId).getBottom(); int x = (int)event.getX(); int y = (int)event.getY(); if(event.getAction() == MotionEvent.ACTION_UP){ if( y < height || y > bottonHeight){ dismiss(); } if(x < left || x > right){ dismiss(); } } return true; } } ); } }
参数介绍
layoutResId表示将要inflate的整体布局
bottomViewId表示实际有控件,实际参与touch事件的布局,位于上面的布局中
animationStyleId表示对popupwindow出现时候定义的动画,一般用资源文件引用
用的时候,根据构造方法传入相关参数,然后用getmMenuView()获得这个popupwindow,在调用系统关于popupwindow的show()即可。
好了,介绍完毕。有兴趣的同学可以用一用。
2.adapterView
关于adapterView,没有太多讲述的。我们平时的listview gridview都属于adapterView。顾名思义,跟adapter有关。f在项目中,直接给gridview设置了onclicklistener,然后就崩溃了。查看logcat,发现如下。
java.lang.RuntimeException: Don’t call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
然后f debug跟了一下看到了这个方法。在adapterView的方法中有一个
@Override public void setOnClickListener(OnClickListener l) { throw new RuntimeException("Don't call setOnClickListener for an AdapterView. " + "You probably want setOnItemClickListener instead"); }
so。。。我想你也看明白了,记得listview,gridview设置onItemClickListener(),或者设置onTouchListener().以前对这个没有概念,现在有了。。。(测试提了好多关于这个的bug - -)
3. 学习计划
最近想学一点自定义view配合动画的使用。例如华为手机屏幕右边小正方形往上拉时候清除内存的动画,我会考虑实现一下,写个demo。还有动态生成view以后,add到layout上时候的动画。到时候会给大家来分享哟,记得点赞,(^__^) 嘻嘻……
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories