1. 程式人生 > >popupwindow放置listview,並且使listview可以響應點選事件

popupwindow放置listview,並且使listview可以響應點選事件

最近在模仿微信的選擇頭像的功能,就是一個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;  
                }  
                  
            });  

還有一般我們彈出來PopWindow之後底下的介面是不會變的,我們可以用下面的方法來設定背景色

WindowManager.LayoutParams lp = getWindow().getAttributes();
		lp.alpha = 0.3f; //其實就是設定一下底下視窗的透明度,在dismiss之後設定回來就可以了
		getWindow().setAttributes(lp);