Android使用popWindow弹出一个窗口,这个窗口上有个EditText文本框,现在遇到一个问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android使用popWindow弹出一个窗口,这个窗口上有个EditText文本框,现在遇到一个问题相关的知识,希望对你有一定的参考价值。

在不同的Andriod手机上点击弹出popWindow弹出框,点击EditText文体框,会出现Error,导致应用退出(有点android手机没有问题,少部分手机有问题),
具体错误:android.view.WindowManager$BadTokenException:Unable to add window - token android.view.ViewRoot$W@47ff8b70 is not valid;is your actvity runing?
贴出一部分代码
LayoutInflater inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
layout = inflater.inflate(R.layout.suggest_window,null);
Popwindow pop = new PopWindow(layout,LayoutParam.Fill_PARENT,LayoutParams.Fill_PARENT);
pop.showAnLocation(layout,Gravity.CENTER,0,0);
pop.setBackgroundDrawable(new BitmapDrawable());
pop.showAsDropDow(layout);
pop.setFocusable(true);
pop.update();

)
求助

是点击EditText时出错还是显示PopupWindow时出错?

对于后者:在Activity启动时,PopupWindow必须等待Activity内部已经完成一些初始化操作之后才能进行显示。

所以你在Activity的onCreate()方法中调用PopupWindow的showAtLocation()方法可能会出错。
(也可能不会出错,如果PopupWindow依赖的一些组件已经完成了初始化的话)

你可以这么改,稍微延迟一段时间再显示PopupWindow:
new Handler().postDelayed(new Runnable()
@Override
public void run()
showPopupWindow();

, 200);
延迟0.2s再showPopupWindow(). 这个时间可能不好把控:延迟太久不是我们希望的,太短又可能出错。

你还可以使用Dialog, 测试一下,我印象中Dialog不会有PopupWindow的这个问题。
参考技术A 我的是在Activity里事件触发,没有遇到你说的这个问题。

popwindow 被魅族虚拟键挡住

  之前在做项目的时候,做了一个分享的功能,调用的是友盟的第三方,功能实现的很完美,也完美分享了,但是在测试的时候,我用魅族X4的手机分享弹出的popwindow被手机自身的虚拟键挡住了,在网上找了好多资料,说可以把手机的虚拟键给关闭,却是也做到了,但是好像不太符合逻辑。看到qq的就不会被挡到心里很佩服qq的大神们是怎么做到的。经过我不断的在网上找popwindow的例子代码,终于发现在设置popwindow的高度的时候我设置成了wrap_content,在这里我觉得有必要讲一下wrap_content、match_parent、fill_parent的区别:

 

1)fill_parent

设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间。这跟Windows控件的dockstyle属性大体一致。设置一个顶部布局或控件为fill_parent将强制性让它布满整个屏幕。

2) wrap_content

设置一个视图的尺寸为wrap_content将强制性地使视图扩展以显示全部内容。以TextView和ImageView控件为例,设置为wrap_content将完整显示其内部的文本和图像。布局元素将根据内容更改大小。设置一个视图的尺寸为wrap_content大体等同于设置Windows控件的Autosize属性为True。

3)match_parent
  Android2.2中match_parent和fill_parent是一个意思.两个参数意思一样,match_parent更贴切,于是从2.2开始两个词都可以用。那么如果考虑低版本的使用情况你就需要用fill_parent了

这里面只需要将popwindow的高度设置成match_parent就不会再被手机自带的虚拟键盘挡住了。

以上是关于Android使用popWindow弹出一个窗口,这个窗口上有个EditText文本框,现在遇到一个问题的主要内容,如果未能解决你的问题,请参考以下文章

PopWindow完全解析

android popupwindow 弹出窗口按钮事件

请问在android中,下面两张图片最上方的那个弹出框是怎么实现的,貌似不是AlterDialog popWindow之类的

Android入门第33天-Android里的弹出式对话框

popwindow根据屏幕自适应位置弹出

Android popwindow 设置位置为bottom 被底部导航栏挡住怎么解决