android之popupwindow使用

android之popupwindow使用

在自己練手的項目中,剛開始沒有寫多少,就遇到了一個尷尬的問題:我TM基礎控件的用法忘記了,然後又是各種Google資料,我爲什麼不自己記錄下來呢?下次就直接找自己的blog就行了。今天就從PopupWindow開始。

問題

在寫菜鳥shop這個自己練手的項目時,在進行寫Rxjava+Retrofit進行網絡加載數據的時候,想到在加載的時候需要個用戶一個提示框來告訴用戶我在很努力的加載數據,尤其是在網絡狀況不理想的情況下,給用戶一個好的用戶體驗。要實現這個效果頓時想到了PopupWindow。在下手寫的時候,就尷尬了,忘記如何設置佈局以及展示了,在印象中有一個show()方法。在AS中.了半天,就是沒有看見show()方法。囧!!!。後面突然想到這個show()方法是Dialog的方法。哎。還是老老實實的查資料吧。

如何實例化

在Android官方文檔中提供了9個構造方法,分別是:

  1. PopupWindiw(Context context)
  2. PopupWindow(Context context ,AttributeSet attrs)
  3. PopupWindow(Context context, AttributeSet attrs ,int defStyleAttr)
  4. PopupWindow(Context context, AttributeSet attrs ,int defStyleAttr,int defStyleRes)
  5. PopupWindow()
  6. PopupWindow(View contentView)
  7. PopupWindow(int width,int height)
  8. PopupWindow(View contentView,int width,int height)
  9. PopupWindow(View contentView,int width,int height,boolean focusable)

前面四個構造方法,經常自定義View的人應該會非常熟悉,這4個方是在寫自定義View的時候,要求重寫的構造方法(第4個可以不重寫)。

剩下的構造方法在Android官方文檔中都有說明。

PopupWindow() // 創建一個新的沒有佈局的,沒有焦點的尺寸爲(0,0)的PopupWindow
PopupWindow(View contentView) //創建一個新的沒有焦點的展示contentView的PopupWindow
PopupWindow(int width,int height) //創建一個新的沒有焦點的PopupWindow
PopupWindow(View contentView,int width,int height) //創建一個新的沒有焦點的展示contentView的PopupWindow
PopupWindow(View contentView,int width,int height,boolean focusable) //創建一個新的展示contentView的PopupWindow,並且能夠指定是否能有焦點

如何使用

今天暫且不講如何設置動畫的問題,動畫的問題,下次再補充說明。

講道理,應該先有一個PopupWindow的實例才能做下面的操作對吧?,我使用9個構造函數後面的5個,其實,後面的5的構造方法,能夠通過PopupWindow提供的setXXX()方法來達到相同的效果。在這裏我使用PopupWindow(View contentView,int widht,int height)做示例。

View popup= LayoutInflater.from(MainActivity.this).inflate(R.layout.popup_layout_1,null);
                PopupWindow popupWindow=new PopupWindow(popup, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
                popupWindow.showAtLocation(view, Gravity.CENTER,0,0);

在構造函數中的contentView代表的是要展示的PopupWindow()中的內容。也就是一個Viewwidthheight分別代表這個View的大小。這兩個值需要指定,否則沒有view能顯示,這兩個值可以是具體的大小(單位爲像素),也可以用MATCH_PARENT此類進行表示。showAtLocation(View parent,int gravity,int xoff,int yoff) 用於展示構造的PopupWindowparent是用於獲取Token的父控件,gravity是控制PopupWindow的展示重心 。xoffyoff表示PopupWindow的左上偏移,在這裏我設置了沒有偏離。

PopupWindow中我使用了簡單的Progress進行填充:效果如下:

很簡單!不是嗎?(可是我還是忘了。)

一些等同操作

setContentView(View contentView) 該方法用於更改PopupWindow中的佈局,也可以爲沒有設置contentViewPopupWindow設置佈局。

setFocusable(boolean focusable)該方法用於更改PopupWindow中佈局是否能夠獲取焦點。

setHegiht(int height)該方法用於更改PopupWindow的高度。

setWidth(int width)該方法用於更改PopupWindow的寬度。

showAsDropDown(View anchor)showAsDropDown(View anchor,int xoff,int yoff,int gravity)showAsDropDown(View anchor,int xoff,int yoff) 這三個方式也是用於展示PopupWindow的,但是都是相對於某個控件進行偏移展示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章