android引用控制項
❶ 如何打造Android自定義的下拉列表框控制項
在Android開發中,原生的Spinner控制項並不總能滿足我們的需求。比如,我們可能希望實現類似Windows或Web網頁中的下拉列表控制項,如圖所示。這種情況下,自定義控制項就顯得尤為重要。
本文將介紹如何通過組合TextView、ImageView和PopupWindow來實現一個自定義的下拉列表框控制項。具體實現步驟包括自定義控制項的布局文件和資源文件,以及控制項類的具體實現。
首先,我們需要准備以下布局文件:
- dropdownlist_view.xml:結果框的布局頁面
- dropdownlist_popupwindow.xml:下拉彈窗列表布局頁面
- dropdown_list_selector.xml:selector資源文件
- dropdown_bg_selector.xml:背景選擇器資源文件
然後,我們定義一個自定義控制項類XCDropDownListView,繼承LinearLayout。在這個類中,我們重寫了ViewGroup的相關方法,並實現了點擊事件的處理邏輯。
在XCDropDownListView類中,我們首先初始化控制項,然後設置點擊事件。當用戶點擊控制項時,會彈出一個下拉列表框。這個下拉列表框由一個PopupWindow實現,包含一個ListView來展示數據項。我們還定義了一個適配器XCDropDownListAdapter來適配ListView的數據。
最後,我們展示了如何在布局文件和代碼中使用這個自定義控制項。在布局文件中,我們引用了自定義控制項;在代碼中,我們設置了控制項的數據和點擊事件的回調。
此外,我們還可以進一步實現點擊item項的回調介面,以滿足更多的功能需求。
❷ 【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)再在邊界文件中引用它: