最近在模仿微信的选择头像的功能,就是一个Popwindow里面是一个ListView,ListView是所有相册,用户点击里面的相册,那么那个相片展示的页面就会显示你选择的相册的相片
。刚开始发现里面的ListView不能获取点击事件,插入如下代码解决
popWinPlaylist.setFocusable(true); popWinPlaylist.update();
随后发现popwindown以外的地方不能响应点击事件,其实你可以通过pw(PopupWindow对象).getContextView()拿到他的父视图。然后通过给父视图注册事件 让pw失去焦点 。
//做一个不在焦点外的处理事件监听 parameterPop.getContentView().setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub parameterPop.setFocusable(false); parameterPop.dismiss(); return true; } }); }
又发现一个问题,返回键不能响应点击事件,相信看了上面代码的应该会明白。要响应谁就交给谁。setFocusable(true)此时已经让Pw获取了焦点。解决办法:因为Pw里放置了ListView。可以利用setOnKeyListener对Pw里的ListView 设置监听代码如下:
parameter_list.setOnKeyListener(new OnKeyListener(){ @Override public boolean onKey(View v, int keyCode, KeyEvent event) { // TODO Auto-generated method stub parameterPop.dismiss(); return true; } });