在指定的控件底下实现下拉框,就像登录QQ时可以在下拉框中选择自己QQ号。
实现思路:要想在指定的控件的底下实现下拉效果,首先,我们得确定要显示的起始坐标,首先得到控件的坐标,然后再由控件的坐标向下移动它本身的高度就是下拉框要显示的位置,得到显示位置就好办了。。在坐标的位置显示一个PopupWindow,布局文件为一个ListView就可以了,宽度为上面控件的宽度,高度就不用管了
调用PopupWindow的showAtLocation方法时,第一个参数总是很让人困惑
a parent view to get the {@link androidviewView#getWindowToken()} token from
这个view是要能获取到window唯一标识的(也就是只要能获取到window 标示,view是什么控件都可以),应该是标示这个popupWindow添加到哪个window里面,对控制popupWindow出现位置没有影响。
这时候,如果作为一个封装出来的通用组件,这个参数是不是就可以随便传呢?
更无奈的是,调用的时候随便传就随便传吧,如果我是在一个最抽象的BaseFragmentActivity里面调用这个方法,这个Activity里面什么具体View都没有,我又该传什么呢?幸好,设计完善的android框架可以为我们提供Activity的content view,这个view是所有实际显示View的顶层:
这时候把rootView传进去就可以了。
PopupWindow 在70以前使用基本没有问题。但是在70之后如果需要从指定View下面d出,会出现全屏、高度显示不全等问题。
下面等方法能解决此现象:
1首先定义工具类:
2顺便定义一个通用的PopupWindow:
3然后调用即可:
1、含义
Popwindow就是Android上自定义的一个d出窗口,是在当前activity的顶部的,可以在任意的位置显示,在显示的时候会阻塞UI线程。
2、构造
Popwindow可以直接通过构造方法获取
new PopupWindow(View contentView,intwidth,intheight,booleanfocusable)
构造方法有很多,但是要确保contentview ,width,hight的设置,否则Popwindow不会显示任何内容
这些参数也都可以单独进行设置,比如 popwindowsetContentView(contentView);
3、解析
popwindow的难点就在于这几个参数的设置,一般容易使人迷惑。
popupWindow1setFocusable(true);//获取焦点
popupWindow1setOutsideTouchable(true);//获取外部触摸事件
popupWindow1setTouchable(true);//能够响应触摸事件
popupWindow1setBackgroundDrawable(newColorDrawable(0x8f000000));//设置背景
关于背景的设置
popupWindow1setFocusable(true);//获取焦点
popupWindow1setOutsideTouchable(true);//获取外部触摸事件
popupWindow1setTouchable(true);//能够响应触摸事件
//popupWindow1setBackgroundDrawable(new ColorDrawable(0x8f000000));//设置背景
一般情况,如果前面几个设置都设置为true,而且果设置了背景的话,那么你按back键和点击d窗外的区域能使d窗消失,如果不设置背景的话,则不会有这样的效果,即使你设置了popupWindowsetOutsideTouchable(true)。
那么这是为什么呢?别人这里已经有完整的解答,就不再赘述了。
详情见: >
以上就是关于安卓如何使下拉菜单工作,而使下面的内容在点击时向下移动全部的内容,包括:安卓如何使下拉菜单工作,而使下面的内容在点击时向下移动、获取Activity的content view、PopupWindow在7.0,8.0以上的显示问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)