iT邦幫忙

DAY 25
2

以「寶寶聯絡簿」為例,適合 Android 初學者的學習筆記系列 第 25

寶寶生活記錄 App (Day25 再探 ArrayAdapter)

昨天我們初次認識了ArrayAdapter [1],程式中使用的建構子是下面這一個:

ArrayAdapter(Context context, int resource, List<T> objects)

昨天討論這個建構子時,第二個參數我們輸入的是 android.R.layout.simple_list_item_1,這個檔的原始檔 [2] 如下所示 (可從 R.layout [3] 這個類別的說明文件找到原始碼):

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2006 The Android Open Source Project
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
  
          http://www.apache.org/licenses/LICENSE-2.0
  
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
/>

昨天已經說明過,一個 List 的 Item 若採用 simple_list_item_1.xml 的版面設計 ,就是一個 TextView 顯示 Baby 的 toString 方法所回傳的字串,因此我們應該可以自己寫一個 XML 檔來取代 simple_list_item_1,首先在自己的專案內反白 res/layout 這個資料夾,選擇 New -> XML -> Layout XML File,筆者產生一個名為 listitem.xml 的檔案,內容如下所示:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tv_listitem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="#00F"
    android:textSize="30sp"
    />

程式利用相關屬性改變顯示文字的顏色 (藍色) 和字體大小 (30sp),有一點需要注意,原本在 simple_list_item_1,TexTView 的 ID 為@android:id/text1,而在我們自己的 listitem.xml,TextView 的 ID 為 tv_listitem,因此在產生一個 ArrayAdapter 物件時,我們必須改用下面這個建構子:

public ArrayAdapter (Context context, int resource, int textViewResourceId, List<T> objects)

BabyListActivity 中產生 ArrayAdapter 物件的程式碼修改成如下所示:

adapter = new ArrayAdapter(BabyListActivity.this,
	R.layout.listitem,
	R.id.tv_listitem,
	babylist);

這樣我們就可以透過 TextView 屬性的修改,達到客製化的目的,執行結果如下所示:

然而讀者一定還是不滿意,我們能不能讓 ListView 的一個 Item,不只有一個 TextView,而是包含多個 Views 呢? (例如一個 ImageView 加一個 TextView) 答案是肯定的,筆者明天會介紹如何讓 ListView 的一個 Item 包含多個 Views。

參考資料

[1] ArrayAdapter | Android Developers, http://developer.android.com/reference/android/widget/ArrayAdapter.html

[2] core/res/res/layout/simple_list_item_1.xml - platform/frameworks/base - Git at Google, https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/layout/simple\_list\_item\_1.xml

[3] R.layout | Android Developers, http://developer.android.com/reference/android/R.layout.html


上一篇
寶寶生活記錄 App (Day24 AdapterView初探)
下一篇
寶寶生活記錄 App (Day26 Customized ArrayAdapter)
系列文
以「寶寶聯絡簿」為例,適合 Android 初學者的學習筆記30

尚未有邦友留言

立即登入留言