您的位置:首页 > 运维架构

PopupWindow被软键盘顶上去后的恢复

2016-02-16 09:26 232 查看
毕业半年多了,之前从来没有写过技术方面的博客,从未和别人分享过自己的成长感觉还是有些不好意思。所以这次决定自己也写下博客,和别人分享下自己的成长吧。

闲话不多说,回归正题哈。

相信大家在开发工作中也遇到弹出框被软键盘顶上去后一时恢复不了的情况(当然,这是我自己猜想的哈,也许你的能力很强,这对你来说根本就不算是问题)。自己在工作中就遇到了这样的问题,当时一下子没搞定。下面我描述下项目中出现问题的情况哈。项目中需要在地图层上弹出弹出框获得用户输入的内容,然后提交给服务器处理。由于需要输入的内容比较多,为了不使软键盘遮挡弹出框(弹出框中添加了ScrollView,但是内容较多再者是界面要求,所以在弹出框的布局高度方面调整的空间不大),我在配置文件AndroidMainfest中设置了界面的属性android:windowSoftInputMode="adjustPan|stateHidden"。这样就可以避免使软键盘遮住弹出框中的内容,但问题出来了。弹出框被软键盘顶到上面去后,没有再恢复为原样,这在项目要求中是不允许的。当时我想了几种方法试着使弹出框恢复,但是都失败了。后来我就想了,我为什么一定要弹出框运动到原来的位置呢。在这个想法下,我换了思路,结果问题解决了。

下面看下我的解决方法哈。

起始就是用到了弹出框的两个方法而已。

我将这两个方法包装了一下,方便外部的调用。

//弹出框显示的方法

public void show(){
if(v==null||pop==null)//v是弹出框所依附的界面,pop是弹出框实例
return;
else if(!pop.isShowing())//没有显示
pop.showAtLocation(v, Gravity.CENTER, 0, 0);//这里我是在屏幕中间显示
}
//取消弹出框的方法

public void disappear(){
if(v==null||pop==null)
return;
else if(pop.isShowing())
pop.dismiss();
}

有了这两个方法,就可以在外部进行调用了。调用的顺序是现将弹出框取消,然后再显示就行了。这样就可以做到看上去像是恢复一样了。

以上是我自己的方法,如果你有更好的解决方法,还请你能和我交流一下哈,很感谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: