安卓學習日誌 Day08

概述

完善 Miwok 應用的用戶體驗,向列表項佈局中添加音頻圖標,添加觸摸反饋的效果,向上按鈕等。

目標

  • 向列表項佈局中添加音頻圖標

  • 點擊 類別標籤時的 點按反饋

  • 點擊列表項時的 點按反饋

  • Android 中的導航模式

  • 詞彙列表頁向上按鈕

實現步驟

添加音頻圖片

在列表項的右側添加一個 播放音頻圖標,以表明該列表項是可點擊播放的。

更改列表項佈局前後的對比如下:

在這裏插入圖片描述

首先從材料設計網站下載 播放箭頭圖標 white 36dp 版本請注意嚮應用中添加所有密度版本的圖標(從 mdpi 到 xxxhdpi)。

從列表項更改前後的對比圖中我們可以看出 音頻圖片與列表項 右邊 的文本部分右對齊,因此 採用 相對佈局 RelativeLayout 來控制位置是 一個不錯的選擇,所以 將 列表項右邊部分的 LineanerLayout 嵌套到 一個 RelativeLayout 當中,添加一個 ImageView 視圖用於顯示 音頻圖標,並更改部分屬性:

在這裏插入圖片描述

類別視圖按下狀態

觸摸反饋在屏幕上用戶與 UI 元素互動的接觸點爲用戶提供了即時外觀確認。 你在 Android 中開發的應用一定要具有觸摸反饋。這樣可以讓你的應用 看起來響應速度很快,即時尚未發生任何其他行爲。

自從在 Lollipop 中推出材料設計後,當你與 UI 元素互動的時候, 都會出現圓形漣漪動畫效果。

在這裏插入圖片描述

在更早版本的 Android 設備上,出現的是靜態彩色按下狀態。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-kw5Auvhk-1610803246741)(https://video.udacity-data.com/topher/2019/August/5d479f48_02o-jhql2up3dxb5w08e2k4xiwrbupo4iwxlgf5wtkiivhlawz5qxiyuxafpsoi3foy2us4nzap42i-nwti-s0w-284-h-122/02o-jhql2up3dxb5w08e2k4xiwrbupo4iwxlgf5wtkiivhlawz5qxiyuxafpsoi3foy2us4nzap42i-nwti-s0w-284-h-122)]

在 Miwok 應用中,我們創建了自己的可點擊視圖——MainActivity 中的類別視圖 以及類別 Activity 中的列表項。我們需要自己處理按下狀態。

在這裏插入圖片描述

將試圖設爲 ?android:attr/selectableItemBackground 背景後, 該視圖默認地將具有一個透明背景。當你觸摸或按下該視圖時,它將顯示一個 按下狀態(即圓形漣漪動畫效果)。這是 Android 框架中定義的默認觸摸反饋行爲。

修改 Miwok 應用

請將 activity_main.xml 中的內容替換爲下面的 XML。每個 TextView 都位於一個 FrameLayout 中,並具有背景顏色,請將 TextView 的背景顏色設爲 ?android:attr/selectableItemBackground

這樣,每個類別視圖都能保留背景顏色,以及觸摸反饋。 順便提下,FrameLayout是一種 ViewGroup,通常包含 1 個子視圖。

在 activity_numbers.xml 文件中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@color/tan_background"
  android:orientation="vertical"
  tools:context="com.example.android.miwok.MainActivity">

<!-- Numbers category -->
<FrameLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:background="@color/category_numbers">
   <TextView
       android:id="@+id/numbers"
       style="@style/CategoryStyle"
       android:background="?android:attr/selectableItemBackground"
       android:text="@string/category_numbers" />
</FrameLayout>

<!-- Family category -->
<FrameLayout
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:background="@color/category_family">
   <TextView
       android:id="@+id/family"
       style="@style/CategoryStyle"
       android:background="?android:attr/selectableItemBackground"
       android:text="@string/category_family" />
</FrameLayout>

<!-- Colors category -->
<FrameLayout
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:background="@color/category_colors">
   <TextView
       android:id="@+id/colors"
       style="@style/CategoryStyle"
       android:background="?android:attr/selectableItemBackground"
       android:text="@string/category_colors" />
</FrameLayout>

<!-- Phrases category -->
<FrameLayout
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:background="@color/category_phrases">
   <TextView
       android:id="@+id/phrases"
       style="@style/CategoryStyle"
       android:background="?android:attr/selectableItemBackground"
       android:text="@string/category_phrases" />
</FrameLayout>
</LinearLayout>

然後在設備上運行應用,測試並確保 MainActivity 中的每個按鈕 都具有觸摸反饋。

注意: 也可以將背景屬性移到 styles.xml 中的 CategoryStyle 定義中。

列表項視圖按下狀態

現在,需要對所有的類別 Activity(NumbersActivity、FamilyActivity 等等) 進行最後的更改,當列表項被點擊時能夠顯示按下狀態(漣漪動畫效果)。

第 1 個選項

在列表項佈局中,可以添加一個新的視圖並覆蓋列表項最外層 LineanerLayout 中的所有其他視圖, 並與該 LineanerLayout 的寬度和高度相匹配。該視圖的背景爲 "?android:attr/selectableItemBackground”,這樣默認情況下,該視圖將爲透明的 使你能夠看到列表項中的內容。當列表項被點擊時,它將顯示按下狀態(在 Lollipop 及更改版本的設備上顯示灰色漣漪動畫效果)。

第 2 個選項

這次,不再向佈局中添加新的視圖,而是在單詞列表佈局中,對 ListView XML 元素添加 android:drawSelectorOnTop="true"屬性。做出這行代碼更改後,每個列表項都將顯示按下狀態(觸摸反饋)。

在 word_list.xml 中:

<?xml version="1.0" encoding="utf-8"?>
<ListView 
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/list"
   android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:drawSelectorOnTop="true"/>

兩個選項都是可行的。在做出這一更改後,測試下應用(順便 把 安卓學習日誌 — Day07 中的幾個更改也一起測試了) 。

測試環境爲 物理機 華爲 P10。 測試視頻鏈接:https://www.bilibili.com/video/BV1qh411277s/

導航模式

導航模式指導用戶在應用的不同部分之間切換。

應用內的導航有很多種模式,每種模式都應該與正在展示給用戶的數據類型相匹配。使用過許多應用後, 你將注意到一些常見的導航模式。

“主詳情佈局”由主數據列表構成。當你點按某個數據項時,系統會顯示該項的詳情視圖。

cw2ag-nwqpu.gif

查看數據的另一種方式是使用“抽屜式導航欄”。如果應用包含多個屏幕,相互之間是“兄弟姐妹”關係, 那麼不同的屏幕可以列在“抽屜”中,並從屏幕左側彈出來。在 Notepad(華爲筆記應用) 中,抽屜式導航欄提供了不同筆記類別的可點擊視圖。

在這裏插入圖片描述

另一種模式是“可滑動標籤頁”。可以在不同的屏幕之間向左或向右滑動,或者可以 在屏幕頂部點按某個標籤頁。設計規範中提供了關於標籤頁的部分。下面是個 掘金 應用 示例,該應用在每個標籤頁中都使用了圖標:

uuea5-m794r.gif

還有其他多種類型的瀏覽方式。例如,日曆應用具有一個滾動日程視圖,但是可以 通過日曆月份視圖跳到特定的天,或者可以查看不同時長的時間,例如周視圖。這些互動方式是 日曆應用特有的。

“向上”按鈕

以下是 Miwok 應用中不同屏幕之間關係的示例圖表。主屏幕(具有四個類別按鈕)是“父” Activity。它會轉到詞彙列表,即“子”Activity。這種父子關係非常重要,因爲有時候, 用戶可能想要導航到父 Activity 或子 Activity。這是另一種導航應用的方式,如果 用戶進入應用中的非主屏幕位置,則很有用。

在這裏插入圖片描述

在查看 Android 應用時,你可能注意到了應用欄中指向左側的水平箭頭,稱爲“向上”按鈕。

在這裏插入圖片描述

用戶可以通過此按鈕導航到父 Activity,而 Miwok 應用中的 父 Activity 其實就是 MainActivity。

在這裏插入圖片描述

“向上”按鈕與“返回”按鈕

有一個疑問,“向上”按鈕和“返回”按鈕的作用不是一樣的嗎?

實際上不完全一樣。“返回”按鈕位於 Android 上的系統導航欄上(最左側的三角 形按鈕)。無論位於哪個應用中,當你點按“返回”按鈕時,都會返回到之前的位置。

在這裏插入圖片描述

但是,在某些情況下,“返回”按鈕和“向上”按鈕產生的行爲卻不同。“向上”按鈕始終會使你 轉到父 Activity。“返回”按鈕可以使你轉到父 Activity、主屏幕或其他應用,取決於你 是如何到達當前屏幕的。

在 Miwok 應用中,用戶 需要經過主屏幕,所以“返回”按鈕和“向上”按鈕的效果是一樣的。但是,最佳做法是讓用戶能夠通過“向上”,明確跳轉到 MainActivity。

將 AndroidManifest.xml 中每個類別的 Activity 更改如下:

<activity
        android:name=".NumbersActivity"
        android:label="@string/category_numbers"
        android:parentActivityName=".MainActivity">

        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity"/>
</activity>

運行,查看結果,測試向上按鈕:

bef07-dnt2k.gif

總結

當我們在構建一個 應用時應該站在用戶的角度多考慮,應用中一些微小的改動都會影響到用戶的體驗。

參考

導航

抽屜式導航

Set up the app bar

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章