天天看點

android 8.0 新功能特性

Android 8.0 為使用者和開發者引入多種新功能。本文重點介紹面向開發者的一部分新功能。

請務必查閱 android 8.0 行為變更以了解平台變更可能影響您的應用的領域。

使用者體驗

自動調整TextView的大小

Android 8.0 允許您根據 TextView 的大小自動設定文本展開或收縮的大小。這意味着,在不同螢幕上優化文本大小或者優化包含動态内容的文本大小比以往簡單多了。如需了解有關如何在 Android 8.0 中自動調整 TextView 的大小的詳細資訊,請參閱自動調整 TextView 的大小。

自适應圖示

Android 8.0 引入自适應啟動器圖示。自适應圖示支援視覺效果,可在不同裝置型号上顯示為各種不同的形狀。要了解如何建立自适應圖示,請參閱自适應圖示預覽功能指南。

統一的布局内邊距和外邊距

Android 8.0 讓您可以更輕松地指定 

View

 元素的對邊使用相同外邊距和内邊距的情形。具體來說,您現在可以在布局 XML 檔案中使用以下屬性:

  • layout_marginVertical

    ,同時定義 

    layout_marginTop

     和 

    layout_marginBottom

  • layout_marginHorizontal

    ,同時定義 

    layout_marginLeft

     和 

    layout_marginRight

  • paddingVertical

    ,同時定義 

    paddingTop

     和 

    paddingBottom

  • paddingHorizontal

    ,同時定義 

    paddingLeft

     和 

    paddingRight

注:如果您自定義應用邏輯以支援不同語言和文化(包括文本方向),請記住,這些屬性不會影響 

layout_marginStart

layout_marginEnd

paddingStart

 或 

paddingEnd

 的值。您可以自行設定這些值和新的垂直與水準布局屬性來建立取決于文本方向的布局行為。

findViewById()簽名變更

現在,

findViewById()

 函數的全部執行個體均傳回 

<T extends View> T

,而不是 

View

。此變更會帶來以下影響:

  • 例如,如果 

    someMethod(View)

     和 

    someMethod(TextView)

     均接受調用 

    findViewById()

     的結果,這可能導緻現有代碼的傳回類型不确定。
  • 在使用 Java 8 源語言時,這需要在傳回類型不受限制時(例如,

    assertNotNull(findViewById(...)).someViewMethod())

    )顯式轉換為 

    View

  • 重寫非最終的 

    findViewById()

     函數(例如,

    Activity.findViewById()

    )将需要更新其傳回類型。

智能文本選擇

在相容裝置上,Android 8.0 讓應用可以幫助使用者以更有意義的方式與文本互動。當使用者長按某個實體中可識别格式的單詞(例如某個位址或餐館名稱)時,系統會選中整個實體。使用者會看到一個浮動工具欄,該工具欄包含可以處理所選文本實體的應用。例如,如果系統識别出某個位址,它可以将使用者導向地圖應用。

系統識别的實體包括位址、網址、電話号碼和電子郵件位址。如需了解詳細資訊,請參閱 

TextClassifier

指紋手勢

您的無障礙服務也可以響應替代的輸入機制,即沿裝置的指紋傳感器按特定方向滑動(上、下、左和右)。要接收有關這些互動的回調,請完成以下一系列步驟:

  1. 聲明 

    USE_FINGERPRINT

     權限和 

    CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES

     功能。
  2. 在 

    android:accessibilityFlags

     屬性中設定 

    FLAG_REQUEST_FINGERPRINT_GESTURES

     标志。
  3. 使用 

    registerFingerprintGestureCallback()

     注冊回調。

請記住,并非所有裝置都包含指紋傳感器。您可以使用 

isHardwareDetected()

 函數識别裝置是否支援此傳感器。即使對于包含指紋傳感器的裝置,您的服務也隻有在指紋傳感器不用于身份驗證目的時才可使用它。要識别此傳感器何時可用,請調用 

isGestureDetectionAvailable()

 函數并實作 

onGestureDetectionAvailabilityChanged()

 回調。

提示文本

Android 8.0 包含可用于與文本可編輯對象的提示文本進行互動的多個函數:

  • isShowingHintText()

     和 

    setShowingHintText()

     函數分别顯示和設定節點的目前文本内容是否表示節點的提示文本。如果節點不包含可編輯文本,則它不應包含提示文本。
  • 要通路提示文本本身,請使用 

    getHintText()

    。即使某個對象目前未顯示提示文本,系統也能成功調用 

    getHintText()

權限

Android 8.0 引入了多個與電話有關的新權限:

  • ANSWER_PHONE_CALLS

     允許您的應用通過程式設計方式接聽呼入電話。要在您的應用中處理呼入電話,您可以使用 

    acceptRingingCall()

     函數。
  • READ_PHONE_NUMBERS

     權限允許您的應用讀取裝置中存儲的電話号碼。

這些權限均被劃分為危險類别,屬于 

PHONE

 權限組。

參考文檔

https://developer.android.com/about/versions/oreo/android-8.0