2014年8月18日 星期一

【Android】決定Dialog的大小和位置

今天的工作內容是「設計一個Dialog,它彈出的位置會隨著呼叫它的Button位置不同,而跟著不同,例如按鈕如果在整個螢幕偏右側,則視窗要在左側,反之則是在右側。」

問題最後算是初步解決了。以下是心得。



簡單來說,先獲得Dialog下的Window物件,然後再用Window物件產生WindowManager。

([Dialog物件].getWindow()可以獲得Window物件。[Window物件].getWindowManager可以獲得.......別問我怎麼獲得Dialog物件!拒絕回答!)

有了WindowManager,就可以進一步獲得這個Dialog的LayoutParams。

(這個LayoutParams可以說是Dialog的LayoutParams嗎?...這個Params的物件路徑明明白白是歸屬在WindowManager下,所以它到底是.........一點都不重要!)



一般的View元件在有LayoutParams後,決定View的大小位置,就不是什麼難事了!

但.........

不管設了什麼值給這個Params,一旦Dialog執行了show()之後,什麼都有可能亂掉!

例如我碰到的情況是「系統會將寬度強制設回-2」。

(系統會強制用預設的-1/-2覆蓋掉我們給予的值!──似乎不是所有人都會有這個困擾!為何只有某些人會碰到、或基本的程序會節外生枝,........抱歉!還在研究中。)

解決方法在於不使用LayoutParams設定位置與大小,而是使用WindowManager的setLayout(int wid, int height)。

(能不能用同樣的方法指定位置?......晚點試驗一下。)


沒有留言:

張貼留言