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
。
指紋手勢
您的無障礙服務也可以響應替代的輸入機制,即沿設備的指紋傳感器按特定方向滑動(上、下、左和右)。要接收有關這些交互的回調,請完成以下一系列步驟:
- 聲明
USE_FINGERPRINT
權限和CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES
功能。 - 在
android:accessibilityFlags
屬性中設置FLAG_REQUEST_FINGERPRINT_GESTURES
標誌。 - 使用
registerFingerprintGestureCallback()
註冊回調。
請記住,並非所有設備都包含指紋傳感器。您可以使用 isHardwareDetected()
函數識別設備是否支持此傳感器。即使對於包含指紋傳感器的設備,您的服務也只有在指紋傳感器不用於身份驗證目的時纔可使用它。要識別此傳感器何時可用,請調用 isGestureDetectionAvailable()
函數並實現 onGestureDetectionAvailabilityChanged()
回調。
提示文本
Android 8.0 包含可用於與文本可編輯對象的提示文本進行交互的多個函數:
isShowingHintText()
和setShowingHintText()
函數分別顯示和設置節點的當前文本內容是否表示節點的提示文本。如果節點不包含可編輯文本,則它不應包含提示文本。- 要訪問提示文本本身,請使用
getHintText()
。即使某個對象當前未顯示提示文本,系統也能成功調用getHintText()
。
權限
Android 8.0 引入了多個與電話有關的新權限:
ANSWER_PHONE_CALLS
允許您的應用通過編程方式接聽呼入電話。要在您的應用中處理呼入電話,您可以使用acceptRingingCall()
函數。READ_PHONE_NUMBERS
權限允許您的應用讀取設備中存儲的電話號碼。
參考文檔
https://developer.android.com/about/versions/oreo/android-8.0