新版本特性——二、Android 7.0、8.0、9.0學(xué)習(xí)整理

前言

基于上篇文章Android 5.0之后的各版本與日常開發(fā)相關(guān)的內(nèi)容整理,本篇文章對Android 7.0、8.0、9.0做個(gè)簡述。
內(nèi)容如下:
Android 7.0(N)
1.多窗口支持(分屏模式)
2.桌面長按圖標(biāo)出現(xiàn)快捷方式

Android 8.0(O)
1.畫中畫模式(PIP,其實(shí)就像是分屏模式的優(yōu)化版)
2.自定義字體,可下載字體(AS 3.x以上可以找到,但沒有中文字體可下載)。
3.自動(dòng)縮放文本視圖(Autosizing TextView)

Android 9.0(P)
1.劉海屏適配。
2.ImageDecoder 和 AnimagedImageDrawable。

Android 7.0

1、多窗口支持(分屏模式)

Android N允許用戶一次在屏幕中使用兩個(gè)App。

知識(shí)點(diǎn)
1、禁用分屏模式。
App默認(rèn)允許分屏模式,如果要禁用分屏模式,可以在AndroidManifest.xml的application節(jié)點(diǎn)添加屬性android:resizeableActivity="false",表示應(yīng)用頁面不接受分屏,這樣有的手機(jī)就沒有顯示分屏按鈕了,或者即使用戶開啟了分屏模式,切換到該應(yīng)用時(shí)仍會(huì)強(qiáng)制回到全屏模式。

2、全屏->分屏->全屏的生命周期如何變化?
App頁面從全屏模式切換到分屏模式,它的Activity生命周期會(huì)經(jīng)歷銷毀后重建的過程,如果不希望重建,可以在該頁面設(shè)置android:configChanges="orientation|screenLayout|screenSize"。(不設(shè)置screenSize也可能會(huì)成功)
舉例A、B兩個(gè)app。
1)appA,全屏->分屏:
onPause() -> onStop() -> onMultiWindowModeChanged() ->onStart() ->onResume() ->onPause()。
2)此時(shí)要選擇appB分屏,當(dāng)點(diǎn)擊appA時(shí),appA才會(huì)調(diào)用onResume。
3)appA,分屏->全屏,此時(shí)只會(huì)回調(diào) onMultiWindowModeChanged()。

3、isInMultiWindowMode()可得知當(dāng)前是否處于分屏模式;onMultiWindowModeChanged方法是每次切換進(jìn)出分屏模式都會(huì)回調(diào)的。

4、視頻播放頁面,建議不在onPause方法中暫停播放視頻,而應(yīng)當(dāng)在onStop方法中暫停播放,并在onStart方法中恢復(fù)播放視頻。

總結(jié)
分屏主要影響的是視頻播放頁面,需要在視頻播放頁設(shè)置分配不重建,且把視頻播放暫停邏輯移到onStop()和onStart()中。實(shí)際上分屏使用情況率不太多,也可以禁止它分屏。

參考
Android編程開發(fā)技巧之Android7.0的分屏模式

2、桌面長按圖標(biāo)出現(xiàn)快捷方式

桌面長按圖標(biāo)出現(xiàn)快捷方式條目,可以拖動(dòng)到桌面,放置成一個(gè)單獨(dú)固定的桌面快捷方式,具體效果可以看支付寶和微博。它分為靜態(tài)配置和動(dòng)態(tài)配置

靜態(tài)配置
1)在res文件夾下創(chuàng)建xml目錄,并在xml目錄下創(chuàng)建配置文件 shortcuts.xml。
2.)在Manifest中添加meta-data配置。只在app啟動(dòng)的第一個(gè)頁面添加配置才有效。

//關(guān)鍵代碼
//1.shortcuts.xml
//shortcutLongLabel 就是長按顯示的條目
//shortcutShortLabel 就是拖動(dòng)到桌面顯示的文字

<shortcuts  xmlns:android="http://schemas.android.com/apk/res/android">    
<shortcut
        android:shortcutId="v5_6_function"
        android:enabled="true"
        android:icon="@mipmap/ic_launcher"
        android:shortcutShortLabel="@string/short_label_5"
        android:shortcutLongLabel="@string/long_label_5"
        android:shortcutDisabledMessage="@string/disable_msg_5">

        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.sz.dzh.dviewsummary"
            android:targetClass="com.sz.dzh.dviewsummary.module.v5_6_function.V5FunctionListActivity" />

    </shortcut>
 </shortcuts>


//2.在AndroidManifest.xml 中 app啟動(dòng)的第一個(gè)Activity里添加配置
 <meta-data
                android:name="android.app.shortcuts"
                android:resource="@xml/shortcuts" />

動(dòng)態(tài)配置
由ShortcutManager發(fā)布, 可以根據(jù)用戶的行為或者偏好添加, 動(dòng)態(tài)更新。

參考
Android 7.0新特性——桌面長按圖標(biāo)出現(xiàn)快捷方式

Android 8.0

1、畫中畫(PIP模式)

Android 7.0推出了分屏模式,8.0推出了新的多窗口模式——“Picture in Picture”(簡稱PIP,“畫中畫”)和分屏模式一樣,適合用于視頻播放,用戶體驗(yàn)上更佳。

知識(shí)點(diǎn)
1、開啟PIP模式
和分屏模式不一樣,Activity默認(rèn)不支持PIP模式,如果要開啟,需要在Activity設(shè)置
android:supportsPictureInPicture="true"。
2、和分屏模式一樣,Activity不重建,可以設(shè)置android:configChanges="orientation|screenLayout|screenSize"。此時(shí)點(diǎn)擊進(jìn)入PIP模式,會(huì)調(diào)用onPause()和onPictureInPictureModeChanged()。
3、isInPictureInPictureMode()可得知當(dāng)前是否處于PIP模式;onPictureInPictureModeChanged方法是每次切換進(jìn)出PIP模式都會(huì)回調(diào)的。
4、PIP模式進(jìn)入需在代碼里設(shè)置,enterPictureInPictureMode()方法。

總結(jié)
PIP模式主要影響的是視頻播放頁面,需要在視頻播放頁設(shè)置分配不重建,且把視頻播放暫停邏輯移到onStop()和onStart()中,它的用戶體驗(yàn)比分屏模式好很多。

參考
Android 8.0 新特性及開發(fā)指南

2、自定義字體及可下載字體

在Android 8.0之前,要在視圖上使用自定義字體必須進(jìn)行以下操作。
1)將字體文件放到 assets 文件夾。
2)從 asset 文件將字體加載為 Typeface 對象
3)用 TextView.setTypeface() 設(shè)置視圖的 Typeface。

Typeface tf =Typeface.createFromAsset(getAssets(), "fonts/sxslst.ttf");
tvOld.setTypeface(tf);

Android 8 推出了字體資源的新特性,提供了可下載字體,不直接與APK一同打包,而是在第一次使用的時(shí)候才去請求,下載和使用方式如下:
1)在Layout Editor中,選擇一個(gè)TextView,然后在Attributes窗口中, 選擇fontFamily > More Fonts,出現(xiàn)了字體Resources窗口。
2)選擇要下載的字體,然后會(huì)在res\fonts 文件夾下創(chuàng)建這個(gè)字體的xml,在TextView中添加android:fontFamily="@font/akronim"即可使用了。
3)LayoutInflater和資源搜索是同步任務(wù)。默認(rèn)情況下,首次嘗試檢索字體會(huì)觸發(fā)對提供字體的應(yīng)用程序的請求,從而增加了第一個(gè)布局繪制時(shí)間,為了避免延遲,可以在Manifest中預(yù)先聲明需要檢索的字體。如果要替換全局字體,可以在theme下設(shè)置 fontFamily。

AS的字體選擇頁面


image.png

總結(jié)
Google提供的可下載字體都是對中文不生效的,這功能對國內(nèi)開發(fā)者來說沒啥用處,要改變字體還是得用回以前的方式。

參考
Android 8.0 新特性(一) - 可下載字體
Android 自定義和可下載字體

3、Autosizing TextView

自動(dòng)調(diào)整文本大小的TextView,當(dāng)TextView的布局邊界尺寸發(fā)生變化時(shí),文本大小可以跟著自動(dòng)縮放調(diào)整。文本的自動(dòng)縮放支持兩種模式,粒度型和預(yù)置大小型。
粒度型:沒有設(shè)置autoSizePresetSizes,那么會(huì)按縮放步長進(jìn)行每一次得縮放。
預(yù)置大小型:文字的大小按預(yù)置變大,比如可以12sp直接到50sp。

屬性 作用
autoSizeTextType none(默認(rèn),表示不自動(dòng)縮放)、uniform(橫、縱縮放)
autoSizeMinTextSize 最小尺寸
autoSizeMaxTextSize 最大尺寸
autoSizeStepGranularity 變化粒度的步長,粒度型
autoSizePresetSizes 指定預(yù)置大小序列,為array數(shù)組,預(yù)置大小型

參考
Android O —— Autosizing TextViews 自動(dòng)調(diào)整文本大小的TextView

Android 9.0

1、劉海屏適配

Google將劉海屏命名為屏幕缺口,Android P 支持最新的全面屏以及為攝像頭和揚(yáng)聲器預(yù)留空間的凹口屏幕,它提供的適配方案如下:
1)對于有狀態(tài)欄的頁面,不會(huì)受到劉海屏特性的影響,因?yàn)閯⒑F涟跔顟B(tài)欄中了。
2)全屏顯示的頁面,系統(tǒng)劉海屏方案會(huì)對應(yīng)用界面做下移處理,避開劉海區(qū)顯示,這時(shí)會(huì)看到劉海區(qū)域變成一條黑邊;
3)已經(jīng)適配Android P應(yīng)用的全屏頁面可以通過谷歌提供的適配方案使用劉海區(qū),真正做到全屏顯示。
可見,其實(shí)如果能接受劉海那一塊有黑邊,不作操作也行,如果一些頁面圖片要置頂?shù)綘顟B(tài)欄,這時(shí)候就要做全屏適配了。

針對頁面是全屏顯示的情況

1、不適配的話將會(huì)留出一條黑色邊。
2、要做到真正全屏的話,那么就先要獲取到劉海的區(qū)域(危險(xiǎn)區(qū)域),內(nèi)容部分(操作按鈕等)應(yīng)當(dāng)避開危險(xiǎn)區(qū)域,保證在安全區(qū)域中展示。橫屏的話兩邊都需要注意避開劉海(危險(xiǎn)區(qū)域)。

各廠商劉海屏適配
上述的適配是Android 9.0才有的解決方案,在這之前,要用各個(gè)廠商的自己的劉海屏適配。

參考
Android 劉海屏適配全攻略

2、ImageDecoder 和 AnimagedImageDrawable

ImageDecoder,該類除了支持對各種圖片格式的解碼、縮放、裁剪之外,其強(qiáng)大之處在于支持對解碼后的圖像做后期處理(post-process),使用該功能可以添加復(fù)雜的自定義特效,比如圓角,或是將圖片放在圓形像框中。編寫后期處理回調(diào)函數(shù),你可以添加任何繪圖指令實(shí)現(xiàn)需要的效果。

AnimagedImageDrawable,支持GIF和WebP格式的動(dòng)圖,并被新增的解碼器類ImageDecoder直接支持,用法跟矢量動(dòng)畫類AnimatedVectorDrawable類似,實(shí)現(xiàn)方式也類似,通過新增渲染線程和工作線程,不需要在UI線程處理動(dòng)圖更新。

參考
Android P圖像媒體后期處理
android P ImageDecoder 使用

Github地址:DViewSummary

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,311評論 0 17
  • 系統(tǒng)角度解讀Android P新特性Android5.0 211.Android Runtime(ART)大多數(shù)...
    天空在微笑閱讀 4,167評論 0 37
  • 用戶體驗(yàn) 通知 Demo下載鏈接在 Android 8.0 中,我們已重新設(shè)計(jì)通知,以便為管理通知行為和設(shè)置提供更...
    classliu閱讀 2,140評論 1 2
  • 今天跟孩爹去了德聊,晚上回來帶小妞去上聲樂課,老師剛從泰國回來,給我們講了那里的風(fēng)土人情,真有趣,爭取今年能有時(shí)間...
    成樂閱讀 183評論 0 1
  • 2013年6月辭別本科的城市,9月來到繼續(xù)啃書的這個(gè)城市。和x同學(xué)從2006年9月認(rèn)識(shí),那時(shí)高二,分了文理科,我們...
    呆呆地豆豆閱讀 475評論 0 1

友情鏈接更多精彩內(nèi)容