1. 【android】自定義Spinner控制項及其使用
一、簡單使用
1. 寫選項值
在res/values/文件夾下新建一個 arrays.xml 文件:
2. 在界面文件中添加Spinner控制項
activity_main.xml 文件:
2.1 dropdown模式
效果:
2.2 dialog模式
效果:
二、自定義dropdown樣式
1. 修改點擊樣式和下拉框樣式
在res/drawable/文件夾下新建兩個文件:
(1)shape_for_custom_spinner.xml 文件(用來定義下拉框的樣式):
(2)selector_for_custom_spinner文件(用來定義Spinner控制項本身的樣式,帶選擇器,有點擊效果):
在界面文件中的Spinner控制項中引用它們:
效果:
2. 增加下劃線
在res/values/文件夾下新建一個style.xml文件:
說明: (1)customTheme——自定義主題樣式,引用它自定義下劃線才能正常顯示。 (2)customSpinnerStyle——自定義的Spinner樣式,和上面的主題樣式一樣在界面文件中引用。 (3)android:divider——分割線顏色。 (4)android:dividerHeight——分割線寬度。
在界面文件中的Spinner控制項中引用它:
效果:
三、動態配置Spinner選項
1. 刪除界面文件中引入的字元串組
即,刪除這一行:
2. 增加一個自定義的layout文件來配置列表樣式
在res/layout/文件夾下新建一個item_for_custom_spinner.xml文件:
3. 在java文件中對Spinner控制項進行配置
MainActivity.java文件:
說明: 不想自己自定義列表樣式可以選擇直接使用Android自帶的support_simple_spinner_dropdown_item 效果:
四、Spinner選擇事件
1. 增加一個簡單的選擇監聽器
可以發現有兩個問題: (1)初始化監聽器的時候事件被調用了。 (2)重復點擊同一選項事情不會被重復調用。
2. 不希望監聽器動作初始化時就被調用
辦法很簡單,就是定義一個flag用來確認監聽器是否是第一次被調用,是則忽略它:
這樣一來,界面初始化時就不會出現監聽器動作被執行了一次的情況了。
3. 不希望重復點擊同一選項時沒有動作
需要重寫Spinner控制項的部分代碼。
(1)在java/com.example.myapplication/文件夾下新建一個ReSpinner.java文件:
(2)替換掉界面文件中的控制項根名稱,其他什麼都不用動: 將
改為
這樣一來,重復點擊同一事件,也能正常多次觸發監聽器動作了。
五、自定義dialog樣式
經過上面的修改,基本已經完成了對dropdown模式下的樣式自定義和監聽器動作自定義了,將spinnerMode改回dialog,增加一個prompt標簽,增加dialog的標題:
(1)先在res/values/strings.xml文件中定義一個標題(必須步驟):
(2)再在邊界文件中引用它: