- 浏览: 409365 次
- 性别:
- 来自: 福州
最新评论
-
野牛精:
感谢楼主分享,帮大忙了。
android ftp 客户端编写(ftp4j) -
happytianqiu:
你好,我最近也在搞这个,能发个demo吗,邮箱是:624951 ...
开发android机顶盒应用 事件,焦点处理 -
zhunanfengfeimeng:
http://www.iteye.comhttp://www. ...
android ftp 客户端编写(ftp4j) -
icyttea:
好棒!感谢楼主分享
vlc for android录制视频与截图 -
clwwlc:
有demo吗
开发android机顶盒应用 事件,焦点处理
在ListView里点击项弹出Dialog这样的状况是比较常见的,但当一个按钮在视图的左上方,点击出现管理菜单时,如果也有Dialog显示,第一,觉得比较丑,第二还得设置ListView项,或其它的东西,它还有一层灰色遮罩层遮住下面的内容,于是我就用了PopupWindow来处理。
用PopupWindow有一个问题,当你想要它关闭时,通常会想像Dialog那样,在它的范围外点击也关闭,所以要在Activity里面添加一些代码:
这样就可以了,当你点击PopupWindow外的区域,会关闭的,注意有一点,如果使用ActivityGroup,在切换标签时,有时不会关闭,所以我只能在onPause里把它手动关闭了。
剩下的就是PopupWindow了,用这个词搜索,多数的代码总是有那么一段是相同的,而且没有讲到重点。
用PopupWindow有一个问题,当你想要它关闭时,通常会想像Dialog那样,在它的范围外点击也关闭,所以要在Activity里面添加一些代码:
@Override public boolean dispatchTouchEvent(MotionEvent event) { if (mPopupWindow==null||!mPopupWindow.isShowing()) { return super.dispatchTouchEvent(event); } boolean isOut=isOutOfBounds(event); Log.d(TAG, "isOut:"+isOut+" event.getAction():"+event.getAction()); if (event.getAction()==MotionEvent.ACTION_DOWN&&isOut) { mPopupWindow.dismiss(); return true; } return false; } /** * 计算是否在PopupWindow外面点击 * * @param event * @return */ private boolean isOutOfBounds(MotionEvent event) { final int x=(int) event.getX(); final int y=(int) event.getY(); final int slop=ViewConfiguration.get(Activity2.this).getScaledWindowTouchSlop(); final View decorView=mPopupWindow.getContentView(); return (x<-slop)||(y<-slop) ||(x>(decorView.getWidth()+slop)) ||(y>(decorView.getHeight()+slop)); } Activity2里面有mPopupWindow。
这样就可以了,当你点击PopupWindow外的区域,会关闭的,注意有一点,如果使用ActivityGroup,在切换标签时,有时不会关闭,所以我只能在onPause里把它手动关闭了。
剩下的就是PopupWindow了,用这个词搜索,多数的代码总是有那么一段是相同的,而且没有讲到重点。
点击左右上方的按钮,调用显示PopupWindow: private void showPopupWindow(View parent) { if (null==mPopupWindow) { initPopuptWindow(); } if (groupId==-1||groupId==-2) { editGroup.setVisibility(View.GONE); addGroupMember.setVisibility(View.GONE); delGroupMember.setVisibility(View.GONE); delGroup.setVisibility(View.GONE); } else { editGroup.setVisibility(View.VISIBLE); addGroupMember.setVisibility(View.VISIBLE); delGroupMember.setVisibility(View.VISIBLE); delGroup.setVisibility(View.VISIBLE); } mPopupWindow.showAsDropDown(parent); parent就是点击的按钮,showAsDropDown这个方法会自动计算显示的位置在parent下面。 } private void initPopuptWindow() { View popupWindow_view=getLayoutInflater().inflate( R.layout.popup_win, null, false); mPopupWindow=new PopupWindow(popupWindow_view); mPopupWindow.setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 这点很重要,如果你用的是PopupWindow(width,height)这样的构造方法,出现的东西就是固定高宽的,显示不是所需要的。设置这样的布局参数后,会自动处理布局的大小。 //mPopupWindow.setOutsideTouchable(false); 这句似乎没有太多效果,查看源码,没发现什么好处。 addContact=(Button) popupWindow_view.findViewById(R.id.add_contact); addGroup=(Button) popupWindow_view.findViewById(R.id.add_group); editGroup=(Button) popupWindow_view.findViewById(R.id.edit_group); addGroupMember=(Button) popupWindow_view.findViewById(R.id.add_group_member); delGroupMember=(Button) popupWindow_view.findViewById(R.id.del_group_member); delGroup=(Button) popupWindow_view.findViewById(R.id.del_group); addContact.setOnClickListener(popupItemClickListener); addGroup.setOnClickListener(popupItemClickListener); editGroup.setOnClickListener(popupItemClickListener); addGroupMember.setOnClickListener(popupItemClickListener); delGroupMember.setOnClickListener(popupItemClickListener); delGroup.setOnClickListener(popupItemClickListener); } 然后就是一个监听器了: mPopupWindow.dismiss(); switch (view.getId()){ case R.id.add_contact: //添加 break; case R.id.add_group: //创建 break; } 、。。。。。。。。。。 } 这样处理有点傻,因为我的布局文件 里存着固定的按钮。 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/management_menu_bg" android:layout_margin="0dip"> <Button android:id="@+id/add_contact" android:textColor="@color/white" android:text="@string/add_contact" android:background="@drawable/popup_bg" android:layout_width="wrap_content" android:layout_height="36dip" android:padding="4dip"/> <Button android:id="@+id/add_group" android:textColor="@color/white" android:text="@string/add_group" android:background="@drawable/popup_bg" android:layout_width="fill_parent" android:layout_height="36dip" android:padding="4dip"/> <Button android:id="@+id/edit_group" android:textColor="@color/white" android:text="@string/edit_group_name" android:background="@drawable/popup_bg" android:layout_width="fill_parent" android:layout_height="36dip" android:padding="4dip"/> <Button android:id="@+id/add_group_member" android:textColor="@color/white" android:text="@string/group_add_member" android:background="@drawable/popup_bg" android:layout_width="fill_parent" android:layout_height="36dip" android:padding="4dip"/> <Button android:id="@+id/del_group_member" android:textColor="@color/white" android:text="@string/group_del_member" android:background="@drawable/popup_bg" android:layout_width="fill_parent" android:layout_height="36dip" android:padding="4dip"/> <Button android:id="@+id/del_group" android:textColor="@color/white" android:text="@string/del_group" android:background="@drawable/popup_bg" android:layout_width="fill_parent" android:layout_height="36dip" android:padding="4dip"/> </LinearLayout> 因为功能相对固定,所以一次性把所有的按钮添加到布局文件中,在初始化时控制着显示与隐藏了。有点弱弱。 效果图如下:
发表评论
-
android 批量打渠道包
2014-09-16 17:27 5905打包,是一个经常会遇到的问题,写个脚本就可以解决了.不同的脚本 ... -
vlc for android录制视频与截图
2014-09-08 18:31 8031首先说明,这不算原 ... -
android百度地图转为高德地图
2014-08-11 11:09 2964使用百度地图也不少时间了,但是一直出现无法解决的问题,在官 ... -
编译 i9000的cm系统
2014-08-04 13:10 1596[color=red][b]此文 并不 ... -
mp4v2 保存h264流
2014-05-01 21:15 11827大侠已经完成了很多操作了,唯一不足的是,工程完整性差一些,而且 ... -
baidumap的缩放到看到所有点
2014-04-09 21:03 1464之前使用1.3.5版本的sdk,通过调用mapviewcont ... -
ViewPager 查看图片
2014-02-13 12:59 4525一个图片查看器 , app到处都是 , 但那是别人的. 现在的 ... -
机顶盒 页面 选中后的 动画
2013-12-05 09:39 2184前面已经说过了,对于机顶盒的焦点的处理. 相信有不少人看 ... -
引爆你的图片浏览, ListView 大图片
2013-11-05 07:58 1314之前发现,ListView里面的图片资源越占越大,特别是当 ... -
微博开放源码
2013-10-23 12:09 1035微博程序已经发布不少时间了,但一直也没有很多用户使用,主要在用 ... -
Mupdf 缩小apk包,减少字体
2013-10-20 15:53 3723在以前的apv中,字体占了很大的一部分,如果去除cjk字体 ... -
ActionBar appcompat 解决碎片化问题
2013-09-15 16:58 2178actionbarsherlock 这个在api11以下的系统 ... -
android机顶盒获取有线mac
2013-09-02 16:09 5503直接上代码: public static String ... -
android竖着的seekbar
2013-08-22 20:33 5534以前网上有位虾士发过一篇文章是关于竖着的seekbar,但是也 ... -
新浪微博oauth2.0 自动认证
2013-08-13 09:01 0oauth2.0作者认为它不先进,都放弃了.但是oauth2. ... -
android 颜表情.
2013-07-20 21:16 1858在使用TagsViewGroup 流布局后,我替换了原来的Gr ... -
flow 流布局.
2013-07-13 20:06 1307在git上看到一个FlowingViewGroup,代码有点旧 ... -
开发android机顶盒应用 事件,焦点处理
2013-07-13 19:58 19838机顶盒应用不同于手机 ... -
android 磁盘缓存.
2013-07-13 19:30 5291开发一个app,特别是图片的app,免不了要存储图片,内存缓存 ... -
TextView 文字淡入效果
2013-04-15 13:34 3498一个文本渐渐地从左到右的显示。 几步就可以了实现了。利用的是V ...
相关推荐
在这个应用实例中,我们主要探讨如何将PopupWindow设置为全屏显示,适配不同手机屏幕,以及在更换头像过程中结合拍照、相册选取和动画效果。 首先,让我们详细了解PopupWindow的基本使用。PopupWindow类提供了创建...
在Android开发中,PopupWindow是一个非常实用的组件,它能够创建一种浮现在当前界面之上的小型窗口,常用于实现下拉菜单、快捷操作等效果。本文将深入探讨如何在PopupWindow中显示一个自适应的ListView,使内容可以...
本篇将详细探讨如何实现自定义的PopupWindow动画效果,以及如何通过源码理解和工具进行优化。 首先,PopupWindow的基本用法包括设置内容视图、宽高、显示位置等。然而,为了增加用户体验,我们往往希望在...
3. 使用showAsDropDown或showAtLocation方法来显示PopupWindow,指定相对于某个View的位置。 在上述描述中,PopupWindow与EditText的交互可以通过监听EditText的焦点变化来实现。这涉及到对EditText添加FocusChange...
PopupWindow是Android开发中一种常用的UI组件,它用于在屏幕上的任意位置弹出一个窗口,通常用来显示一些临时的信息或者提供交互操作。本教程将深入探讨PopupWindow的基本使用,并结合ListView展示其实战应用。 ...
PopupWindow的背景可以通过`setBackgroundDrawable()`来改变,动画效果可以使用Transition动画或者自定义动画。关闭策略通常通过监听PopupWindow的触摸事件或外部点击事件来实现,例如: ```java popupWindow....
在Android开发中,`...当然,你可以根据需求进一步定制`PopupWindow`,比如添加更多交互逻辑、调整动画效果、优化性能等。`PopupWindow`是一个非常灵活的组件,熟练掌握它的使用将对你的Android开发工作大有裨益。
6. **代码优化**: 为了提高代码的可维护性和复用性,可以将PopupWindow的创建和动画逻辑封装成一个工具类或单独的组件。这样,在其他地方需要类似功能时,可以直接复用。 此外,如果你有其他的实现方案或者想进一步...
在实际开发中,我们还可以结合使用多种动画效果,比如同时进行缩放和平移动画,让PopupWindow看起来更加自然。另外,可以利用`AnimatorSet`来组合多个动画,使其按照特定顺序执行。 除了直接在PopupWindow上应用...
本文将详细介绍如何使用`PopupWindow`在Android应用中模仿微信右上角的弹出菜单效果。 首先,我们需要理解`PopupWindow`的基本用法。`PopupWindow` 是一个可以在屏幕任意位置显示的窗口,它不依附于任何Activity,...
在Android开发中,`PopupWindow`和`ListView`是两种常用组件,它们结合使用可以创建出丰富的交互式界面。`PopupWindow`是一个可以显示在任意位置的浮动窗口,而`ListView`则是一种可滚动的视图,用于展示大量数据。...
PopupWindow在Android开发中是一种非常常用的轻量级弹窗组件,它...在实际项目中,不断实践和优化,将使你的PopupWindow使用更加得心应手。在PopupWindowDemo中,你可以找到具体的代码示例,帮助理解并掌握这些知识点。
- **动画效果**:为`PopupWindow`的显示和消失添加平滑的动画效果,提升用户体验。 - **适配不同设备**:确保`PopupWindow`的大小和位置能在不同尺寸和方向的屏幕上正确显示。 - **触摸事件处理**:处理触摸事件,...
通过不断的实践和优化,我们可以创造出符合用户需求、具有良好交互体验的PopupWindow。对于这个“自定义popupWindow修改版”,开发者可以通过查看源代码,理解并借鉴其中的设计思路,以提升自己的Android开发能力。
6. **处理动画**:为了增强用户体验,你可以为PopupWindow的显示和消失添加动画效果,如淡入淡出、滑动等。可以使用Animation类或Transition类来实现。 7. **事件监听**:确保PopupWindow的关闭事件能够正确触发,...
通过学习和研究这个源码,开发者不仅可以掌握PopupWindow的基本用法,还能了解到如何优化用户体验,例如添加动画效果,处理触摸事件等。这对于提升Android开发技能,尤其是对于界面交互设计的理解非常有帮助。