How to change the height of drop down list for spinner?
為什麼要有個稱呼一致的名字都這麼地困難?就拿寫 GUI 程式時,一定要用到的 GUI Framework 來說,大概只有 button 這個控制元件,名稱還算一致。其他的,可就沒這麼幸運了,毎家都有他自己的叫法。
初時在讀 Android 的文件時,看到 Spinner 這個 widget,還真的丈二金剛摸不著頭緒,一下子還以為這是什麼神奇的元件。仔細一看,哦原來這就是 Windows 中的 DropDownList。在 Qt 的世界裡,這叫做 QComboBox,而 Java 的 AWT 又稱其為 Choice。
看吧!可不可以拜託你們,不要將創意用在這名稱上,真是辛苦了我們這些天生命苦的工程師。寫程式之餘,還要先玩個「對對樂」。
好啦,回歸正傳。在 Android 中,要寫個 Spinner,也不算麻煩,底下是個簡單的範例。
首先,在 layout xml 檔中,加上 Spinner 這個 widget。
程式中的第 12~16 行,告訴你如何將選項字串陣列,加到 Spinner 上。
好了,這執行結果像是這樣。

首先看到的問題,就看我之前寫的 親愛的,我把 AutoCompleteTextView 縮小了 一樣。這 Spinner 的長相,實在是太大了。不過,有看過這篇的你,大概已經猜到解法了。不過這 Spinner 有點特別,他有一個 android.R.layout.simple_spinner_item 外,還有一個 android.R.layout.simple_spinner_dropdown_item。
從名稱看來,simple_spinner_item 應該是用在 Spinner 本身,另一個 simple_spinner_dropdown_item 則是用在 Spinner 的下拉列表中。我們先來改變下拉列表的大小好了。
改法一樣,參考 simple_spinner_dropdown_item.xml 的內容,自己寫個 small_spinner_dropdown_item.xml。
原來的 simple_spinner_dropdown_item.xml 內容如下:
改好後的 small_spinner_dropdown_item.xml 像這樣。第 6,9 行,就是更改的部份。
再將原程式第 14 行中的 android.R.layout.simple_spinner_dropdown_item,換成 R.layout.small_spinner_dropdown_item。
adapter.setDropDownViewResource(R.layout.small_spinner_dropdown_item);
大功告成,這執行結果像是這樣。

等一下,這 Spinner 本身的大小,好像還沒改。
的確是,我原先以為一樣畫葫蘆,將 android.R.layout.simple_spinner_item 改掉,就可以了。可是事情好像沒有那麼地簡單,試了半天,都沒效。只好向高手求助一下,有誰知道答案的,請貢獻一下你的解法。
繼續閱讀全文...