android 解决 Popupwindow不能复制粘贴的问题

来源:互联网 发布:sql on hadoop 编辑:程序博客网 时间:2024/05/18 12:30

开始之前,先说下情况,因为工作原因,不能将一些具体的代码上传,所以只是提供大家解决思路,但是是正确的,已解决,大家可以借鉴

想必做过评论的功能的时候都会用到单独的窗口界面,但是这个界面用 Popupwindow实现起来是很完美的,也很方便,但是有一个问题,就是包含EditText的时候,不能复制粘贴,这是android系统的bug,所有当需要复制粘贴用 Popupwindow就不那么友好了,以下给与解决方案

方案1 : 本人没有试过,觉得太复杂了,在我原有的基础上修改太过于麻烦,这里提供以下地址,需要尝试的也可以看下,这个方案是利用DialogFragment实现,可参考http://blog.csdn.net/elder_sword/article/details/46624429,再次说明下,这种方案我没有试过,有兴趣的童鞋可以尝试

方案2:直接使用Dialog做窗口界面,已实现,在Popupwindow窗口的基础上改成Dialog,Dialog的实现有两点需要注意:

一是不能全屏显示:在设置Dialog的属性时可以设置params.width = LayoutParams.MATCH_PARENT;

二是不能显示软键盘:在设置Dialog的属性值时很重要的一点就是flag这个属性,这个属性默认的是FLAG_NOT_FOCUSABLE,

故名思义不能获取输入焦点,这样就会导致Dialog显示的时候,就算点击EditText也不能调用起来软键盘,大家可能会说

如果强制让EditText获取焦点时并强制调用显示软键盘,如下代码:

if(edit != null){
edit.requestFocus();
InputMethodManager imm = (InputMethodManager) edit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
}

这样的结果会导致软键盘显示在Dialog的背景下面,dialog在软键盘的上面显示,这样结果的原因还是归咎于Dialog并没有获取焦点,所以讲falg属性设置成LayoutParams.FLAG_DIM_BEHIND就能获取焦点了,这时候在强制显示软键盘

就没什么问题了,但是还有一个情况就是params.softInputMode = LayoutParams.SOFT_INPUT_STATE_ALWAYS_

VISIBLE;//显示dialog的时候,就显示软键盘,这种情况就可以不主动强制弹起软键盘,在dialog显示的同时也显

示软键盘了,如果该属性值为params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_R

ESIZE;这时想要dialog显示同时也显示软键盘就需要强制调用弹起软键盘的代码了,具体的Dialog样式可参考连接

http://www.daxueit.com/article/7252.html,受益良多


总结:使用Dialog可以解决复制粘贴问题,Dialog样式可以照提供的链接地址尝试,本人亲测没有问题,至于方案

一并没有试过,感兴趣的同学可以尝试


0 0
原创粉丝点击