- Android Studio開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到App上線 (移動(dòng)開發(fā)叢書)
- 歐陽燊
- 1300字
- 2020-11-28 17:31:41
3.3 適配視圖基礎(chǔ)
本節(jié)介紹適配器的基本概念,結(jié)合對下拉框Spinner的使用說明分別闡述數(shù)組適配器ArrayAdapter、簡單適配器SimpleAdapter的具體用法與展示效果。
3.3.1 下拉框Spinner
Spinner是下拉框,用于從一串列表中選擇某項(xiàng),功能類似于單選按鈕的組合。下拉列表的展示方式有兩種,一種是在當(dāng)前下拉框的正下方展示列表,此時(shí)把spinnerMode屬性設(shè)置為dropdown;另一種是在頁面中部以對話框形式展示列表,此時(shí)把spinnerMode屬性設(shè)置為dialog。另外,Spinner還可以在代碼中調(diào)用下列4個(gè)方法。
● setPrompt:設(shè)置標(biāo)題文字。
● setAdapter:設(shè)置下拉列表的適配器。適配器可選擇ArrayAdapter或SimpleAdapter。
● setSelection:設(shè)置當(dāng)前選中哪項(xiàng)。注意該方法要在setAdapter方法后調(diào)用。
● setOnItemSelectedListener:設(shè)置下拉列表的選中監(jiān)聽器,該監(jiān)聽器要實(shí)現(xiàn)接口OnItemSelectedListener。
下面是一個(gè)自定義選中監(jiān)聽器的例子:
private String[] starArray = {"水星", "金星", "地球", "火星", "木星", "土星"}; private class MySelectedListener implements OnItemSelectedListener { public void onItemSelected(AdapterView<? > arg0, View arg1, int arg2, long arg3) { Toast.makeText(SpinnerDialogActivity.this, "您選擇的是"+starArray[arg2], Toast.LENGTH_LONG).show(); } public void onNothingSelected(AdapterView<? > arg0) { } }
下面是使用Spinner控件的代碼片段:
ArrayAdapter<String> starAdapter = new ArrayAdapter<String>(this, R.layout.item_select, starArray); starAdapter.setDropDownViewResource(R.layout.item_dropdown); Spinner sp = (Spinner) findViewById(R.id.sp_dialog); sp.setPrompt("請選擇行星"); sp.setAdapter(starAdapter); sp.setSelection(0); sp.setOnItemSelectedListener(new MySelectedListener());
接下來看對話框模式的下拉效果,如圖3-11所示。頁面中部彈出六大行星的下拉列表;點(diǎn)擊具體行星項(xiàng)后自動(dòng)收起下拉列表,并且下拉框中的文字變更為剛選中的行星名稱。

圖3-11 dialog模式的下拉列表
3.3.2 數(shù)組適配器ArrayAdapter
前面在演示Spinner時(shí)用到了setAdapter方法設(shè)置適配器。這個(gè)適配器好比一組數(shù)據(jù)的加工流水線,你丟給它一大把糖果,適配器把糖果排列好順序,然后拿來制作好的包裝盒,把糖果往里面一塞,出來的便是一個(gè)個(gè)精美的糖果盒。這個(gè)流水線可以做得很復(fù)雜,也可以做得簡單一些,最簡單的流水線就是之前演示Spinner用到的ArrayAdapter。
ArrayAdapter主要用于每行列表只展示文本的情況,有兩道工序,第一道工序是構(gòu)造函數(shù),除了提供一堆原始數(shù)據(jù)外(六大行星的名稱列表),還可以指定下拉框當(dāng)前文本的包裝盒,即下面這行代碼里的R.layout.item_select,這個(gè)布局文件內(nèi)只有一個(gè)TextView,定義了當(dāng)前選中文本的大小、顏色、對齊方式等屬性。
ArrayAdapter<String> starAdapter = new ArrayAdapter<String>(this, R.layout.item_select, starArray);
第二道工序是定義下拉列表的包裝盒,即下面代碼里的R.layout.item_dropdown,定義了對話框列表中每行文本的顯示屬性。
starAdapter.setDropDownViewResource(R.layout.item_dropdown);
經(jīng)過這兩道工序,ArrayAdapter就明確了原料糖果的分揀過程與包裝方式,接下來只待Spinner調(diào)用setAdapter方法發(fā)出開動(dòng)機(jī)器指令,適配器便會(huì)把一個(gè)一個(gè)糖果盒輸出到屏幕界面。
3.3.3 簡單適配器SimpleAdapter
ArrayAdapter只能顯示文本列表,顯然不夠美觀,有時(shí)我們還想給列表加上圖標(biāo),比如六大行星是否分別顯示星球的小圖。這時(shí)SimpleAdapter就派上用場了,它允許在列表項(xiàng)中展示多個(gè)控件,包括文本與圖片。
SimpleAdapter的實(shí)現(xiàn)略微復(fù)雜,除了第二道工序與ArrayAdapter一樣外,第一道工序需要更多信息。例如,原料不但有糖果,還有賀卡,這樣就得把一大袋糖果和一大袋賀卡送進(jìn)流水線,適配器每次拿一顆糖果和一張賀卡,把糖果與賀卡按規(guī)定塞進(jìn)包裝盒。對于SimpleAdapter的構(gòu)造函數(shù)來說,第二個(gè)參數(shù)Map容器放的是原料糖果與賀卡,第3個(gè)參數(shù)放的是包裝盒,第4個(gè)參數(shù)放的是糖果袋與賀卡袋的名稱,第5個(gè)參數(shù)放的是包裝盒里塞糖果的位置與塞賀卡的位置。
下面是使用SimpleAdapter的示例代碼:
int[] iconArray = {R.drawable.shuixing, R.drawable.jinxing, R.drawable.diqiu, R.drawable.huoxing, R.drawable.muxing, R.drawable.tuxing }; List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (int i = 0; i < iconArray.length; i++) { Map<String, Object> item = new HashMap<String, Object>(); item.put("icon", iconArray[i]); item.put("name", starArray[i]); list.add(item); } SimpleAdapter starAdapter = new SimpleAdapter(this, list, R.layout.item_select, new String[] { "icon", "name" }, new int[] { R.id.iv_icon, R.id.tv_name }); starAdapter.setDropDownViewResource(R.layout.item_simple);
下面是每個(gè)列表項(xiàng)的布局文件代碼(包裝盒):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:id="@+id/iv_icon" android:layout_width="0dp" android:layout_height="50dp" android:layout_weight="1" android:gravity="center"/> <TextView android:id="@+id/tv_name" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="3" android:gravity="center" android:textSize="17sp" android:textColor="#ff0000"/> </LinearLayout>
敲了這么多代碼,下面看一下加了圖標(biāo)的下拉列表的效果圖,如圖3-12所示。此時(shí)下拉列表左邊顯示行星的圖片,右邊顯示行星的名稱。

圖3-12 帶圖標(biāo)的下拉列表
- INSTANT Mock Testing with PowerMock
- WebAssembly實(shí)戰(zhàn)
- Wireshark Network Security
- INSTANT Django 1.5 Application Development Starter
- Java EE 8 Application Development
- Android開發(fā):從0到1 (清華開發(fā)者書庫)
- Getting Started with Hazelcast(Second Edition)
- Express Web Application Development
- Creating Stunning Dashboards with QlikView
- iOS自動(dòng)化測試實(shí)戰(zhàn):基于Appium、Python與Pytest
- Learning AWS
- App Inventor少兒趣味編程動(dòng)手做
- PostgreSQL 12 High Availability Cookbook
- Learning Dynamics NAV Patterns
- MySQL從入門到精通