PopupWindow相關問題記錄

PopupWindow相關問題記錄

Android關於彈窗的實現大體有兩種方式實現:AlertDialog和PopupWindow,固然還有使用Activity並配合Dialog主題實現彈窗的;

PopupWindow和AlertDialog二者的最主要的區別就是顯示位置問題:
位置是否固定,AlertDialog顯示位置相對是固定的,直接顯示在Window的中間位置,而PopupWindwo則能夠在Window的任意位置顯示;

重要點記錄

  • PopupWindow.mFocusable變量,做用是設置PopupWindow是否能夠接受焦點事件,要設置爲true後(經過PopupWindow.setFocusable(true)或PopupWindow的含有三個參數的構造函數,最後一個參數表明該屬性),點擊PopupWindow外部會消失,Back鍵也會消失,該值默認爲false,若爲false,這兩個事件都不會起做用;html

  • PopupWidow.setTouchable(true);做用時設置PopupWindow可接受觸摸事件,設置這個,點擊外部區域不會消失,並且點擊Back鍵也不消失,該值默認爲true,因此不用顯示設置;git

  • PopupWindow.setOutsideTouchable(true);做用是設置可接受外部區域的觸摸事件,默認爲false,設置爲true後,可接受外部區域點擊事件,點擊外部區域會消失,可是點擊Back鍵仍是不消失;github

  • PopupWindow.setBackgroundDrawable(new ColorDrawable());做用是設置PopupWindow的背景,若是不設置背景,有些版本就會出現一個問題:不管點擊外部區域仍是Back鍵都沒法dismiss彈框;
  • PopupWindow.showAsDropDown()方法是設置PopupWindow顯示在某個控件之下,能夠設置左右偏移量,至關於下拉彈框;ide

  • PopupWindow.showAtLocation()方法能夠指定PopupWindow在Window上的任意位置,注意:第一個參數不是anchor View,而是爲了從父視圖來獲取getWindowToken()標記的,獲取一個建立新Window的Window Token值(令牌),第二個參數是經過Gravity控制PopupWindow彈出的大體位置,後面兩個參數是彈出位置在x/y方向上的偏移量;函數

  • 建立PopupWindow的時候指定寬高值爲contentView的寬高值時,showAsDropDown()方法可以自適應,若是設置爲wrap_content,showAsDropDown()方法會認爲下面的空間一直很充足,這樣就不會自適應,可能會被擋住,因此:若是PopupWindow裏面有ListView,ScrollView時,必定要動態設置PopupWindow的大小;動畫

PopupWindow.showAtLocation(View parent,int gravity,int x,int y)方法解析:

第一個參數上面已經說了,不是anchor View,只是經過該View獲取建立新Window的Window Token(看源碼),第二個參數的做用是設置相對於Window的位置,如Gravity.TOP.Gravity.START等,注意,若是設置了後面兩個位置精確值,第二個參數就沒有效果了,能夠設置爲Gravity.NO_GRAVITY了;code

PopupWindow.showAsDropDown(View anchor,int xOff,int yOff,int gravity)方法解析:

主要是第四個參數,第四個參數的做用是 @param gravity Alignment of the popup relative to the anchor,相對於anchor View(錨)的對齊方式;htm

若是單獨設置第二,三個參數,那麼這兩個值表明的偏移量是沒有效果的,只有同時設置後三個參數,偏移量下x/y值纔會起做用;blog

建立PopupWindow時候指定高寬時showAsDropDown可以自適應,若是設置爲wrap_content,showAsDropDown會認爲下面空間一直很充足,注意:若是PopupWindow裏面有ListView,ScrollView時,必定要動態設置PopupWindow的大小事件

PopupWindow彈出的動畫效果,默認是直接彈出和消失的

經過PopupWindow.setAnimationStyle()方法設置動畫彈出和消失的效果;

直接參考這裏 Android PopupWindow使用方法小結 - 式 - 博客園

總體參考自該Demo SmartPopupWindow

相關文章
相關標籤/搜索