popupwindow放置listview,並且使listview可以響應點選事件
阿新 • • 發佈:2019-01-01
最近在模仿微信的選擇頭像的功能,就是一個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);