欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Android 折疊屏適配攻略

 更新時(shí)間:2019年07月16日 14:08:04   作者:NanBox  
這篇文章主要介紹了Android 折疊屏適配攻略,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

隨著三星 Galaxy Fold 和 華為 Mate X 的發(fā)布,折疊屏手機(jī)開始進(jìn)入大家的視線。在改變手機(jī)體驗(yàn)的同時(shí),也給我們開發(fā)人員在適配方面帶來(lái)了更多的挑戰(zhàn)。本文給大家介紹一下 Android 開發(fā)中和折疊屏相關(guān)的一些概念,以及如何進(jìn)行折疊屏的適配。

折疊屏適配

折疊屏之所以需要適配,是因?yàn)槲覀兊膽?yīng)用有可能在運(yùn)行的過(guò)程中,所在的屏幕尺寸發(fā)生了變化,這種情況對(duì)現(xiàn)有項(xiàng)目多少都會(huì)產(chǎn)生一些問(wèn)題。

所以折疊屏適配的本質(zhì)是: 當(dāng)應(yīng)用運(yùn)行時(shí),屏幕的尺寸、密度或比例發(fā)生了變化,應(yīng)用能夠繼續(xù)在變化后的屏幕上正常顯示和正常運(yùn)行。

其實(shí)這種情況并不是折疊屏出現(xiàn)之后才有的,應(yīng)用的縱向橫向切換也會(huì)發(fā)生同樣的情況,只不過(guò)很多應(yīng)用都強(qiáng)制縱向,不需要處理這種適配了。

允許改變應(yīng)用尺寸

要適配折疊屏,首先是要讓應(yīng)用支持動(dòng)態(tài)改變尺寸,我們需要在 menifest 中的 Application 或?qū)?yīng)的 Activity 下聲明:

android:resizeableActivity="true"

相反,如果暫時(shí)不打算適配,把這個(gè)參數(shù)設(shè)為 false 就好了。

需要說(shuō)明的是,這個(gè)參數(shù)在 Android 7.0 或更高版本默認(rèn)為 true,以下則默認(rèn)為 false。

下面介紹兩個(gè)和這個(gè)參數(shù)相關(guān)的概念。

分屏模式

之所以從 Android 7.0 開始,把 resizeableActivity 默認(rèn)改為 true,是因?yàn)樵?7.0 里增加了一個(gè)新功能,叫分屏模式。

.jpg

如果把 resizeableActivity 設(shè)為 false,就意味著應(yīng)用是不支持分屏模式的,它決定了應(yīng)用是否有分屏的設(shè)置項(xiàng)。

.jpg

兼容模式

當(dāng) resizeableActivity 取 false 時(shí),展開折疊屏可能會(huì)變成這樣的效果:

.jpg

這個(gè)效果類似于在 iPad 上使用不兼容的 iPhone 應(yīng)用,這個(gè)四周用黑色填充的模式,叫兼容模式。

兼容模式的顯示和最大支持比例 maxAspectRatio 有關(guān),當(dāng)屏幕比例超過(guò) maxAspectRatio 時(shí)才會(huì)用黑邊填充,官方建議把 maxAspectRatio 設(shè)為 2.4 (12 : 5),修改 maxAspectRatio 的方法如下:

Android 8.0 或以上版本

在 標(biāo)簽中配置 android:maxAspectRatio:

<activity android:name=".MainActivity"
   android:maxAspectRatio="2.4" />

Android 8.0 以下版本

在 標(biāo)簽中添加名為 android.max_aspect 的 meta-data:

<meta-data android:name="android.max_aspect" android:value="2.4" />

如果 resizeableActivity 設(shè)為 true,就不需要設(shè)置 maxAspectRatio 了,設(shè)了也不會(huì)生效。

監(jiān)聽尺寸改變

在默認(rèn)情況下,當(dāng)屏幕發(fā)生了變化,系統(tǒng)會(huì)銷毀并重新創(chuàng)建整個(gè) Activity。但我們希望屏幕變化之后,程序能夠以切換前的狀態(tài)繼續(xù)運(yùn)行,不需要重啟頁(yè)面。

我們可以給 Activity 添加配置:

android:configChanges="screenSize|smallestScreenSize|screenLayout"

這樣配置后,當(dāng)屏幕發(fā)生變化就不會(huì)重啟 Activity 了,會(huì)調(diào)用到 onConfigurationChanged 方法,我們可以在這個(gè)方法里獲取到當(dāng)前的屏幕信息:

@Override
public void onConfigurationChanged(Configuration newConfig) {
 super.onConfigurationChanged(newConfig);
 Log.i("config", "newConfig.screenHeightDp:" + newConfig.screenHeightDp
   + ", newConfig.screenWidthDp" + newConfig.screenWidthDp);
}

這樣改之后需要注意測(cè)試,看看頁(yè)面的布局是否發(fā)生錯(cuò)亂,如果布局不合理就需要修改布局以適配不同分辨率。

我們也可以根據(jù)屏幕信息來(lái)更新布局,比如在大屏幕上把 LinearLayout 切換成 GridLayout,充分利用大屏幕的顯示空間,這是更進(jìn)一步的優(yōu)化做法了:

.jpg

Android Q

在即將到來(lái)的 Android Q 上,增加了一些支持折疊屏的特性。

Multi-resume

對(duì)于分屏模式,過(guò)去的分屏只支持兩個(gè)應(yīng)用同時(shí)顯示,而大屏幕帶來(lái)了更多的可能性,現(xiàn)在已經(jīng)允許兩個(gè)以上的應(yīng)用同時(shí)顯示了。

在 Android Q 之前的版本,以分屏模式運(yùn)行的應(yīng)用里面,只有獲取到焦點(diǎn)的 Activity 會(huì)處于 onResume 狀態(tài),其他可見 Activity 都是處于 onPause 狀態(tài)。

而在 Android Q 上,所有頂層可見 Activity 都處于 onResume 狀態(tài),保證在分屏模式下的可見 Activity 都能正常運(yùn)行。但能獲取到焦點(diǎn)的 Activity 依然只有一個(gè),我們把這個(gè) Activity 叫做 TopResumedActivity。

在 Android Q 的 Activity 里增加了一個(gè)生命周期回調(diào)方法 onTopResumedActivityChanged(),它會(huì)在 Activity 獲取或失去焦點(diǎn)時(shí)調(diào)用,可以用來(lái)判斷當(dāng)前 Activity 是否擁有焦點(diǎn):

protected void onTopResumedActivityChanged(boolean topResumed) {
 if (topResumed) {
  // 獲取到焦點(diǎn)
 } else {
  // 失去焦點(diǎn)
 }
}

當(dāng)我們使用了獨(dú)占資源時(shí)就要用到這個(gè)方法。什么叫獨(dú)占資源?麥克風(fēng)、攝像頭就是,這類資源同一時(shí)間只能給一個(gè) Activity 使用。

比如分屏模式下的多個(gè) Activity 都使用了攝像頭,但這時(shí)候只有獲取到焦點(diǎn)的 Activity 擁有訪問(wèn)權(quán)限,這種情況下就要通過(guò) onTopResumedActivityChanged() 判斷當(dāng)前 Activity 是否獲取到焦點(diǎn)。在失去焦點(diǎn)的時(shí)候可以不釋放攝像頭,但是需要處理好攝像頭斷開連接和重新連接的情況。

.jpg

minAspectRatio

在 Android Q 之前只能配置最大支持比例 maxAspectRatio,現(xiàn)在 Android Q 可以配置最小支持比例 minAspectRatio 了, 用法和 maxAspectRatio 一樣:

<activity android:name=".MainActivity"
   android:maxAspectRatio="2.4"
   android:minAspectRatio="1"/>

最大最小支持比例,都是在 resizeableActivity 取 false 的時(shí)候才會(huì)有用。

調(diào)試

最好的調(diào)試工具當(dāng)然就是用真機(jī)了,但目前只有少部分人有這個(gè)條件,下面是真機(jī)以外的兩個(gè)調(diào)試方案。

Android Studio

在 Android Studio 3.5 里增加了折疊屏設(shè)備的虛擬機(jī),我們可以創(chuàng)建一個(gè)來(lái)調(diào)試:

.jpg

通過(guò)點(diǎn)擊模擬器上的按鈕,我們可以切換虛擬機(jī)的折疊和展開狀態(tài):

.jpg

命令行

我們可以通過(guò)命令行動(dòng)態(tài)修改手機(jī)分辨率,達(dá)到模擬折疊屏切換的效果,以 Mate X 的分辨率為例,我們先使用命令行:

adb shell wm size 1148x2480

手機(jī)分辨率將模擬為 1148x2480,這是 Mate X 折疊時(shí)的分辨率,這時(shí)再輸入:

adb shell wm size 2200x2480

將手機(jī)分辨率修改為 Mate X 展開后的分辨率 2200x2480,用這種方式模擬了折疊屏展開的切換。

你可以再次修改分辨率為 1148x2480,模擬屏幕折疊的切換。最后玩完了用下面命令行恢復(fù)手機(jī)自身分辨率:

adb shell wm size reset

結(jié)束

關(guān)于折疊屏的適配,就介紹這么多??偟膩?lái)說(shuō),如果要適配折疊屏,第一步是把 resizeableActivity 設(shè)為 true,然后給 Activity 配置 configChanges,并進(jìn)行測(cè)試。最后可以更近一步,給大屏幕設(shè)計(jì)另一套 UI,在折疊屏切換時(shí)切換 UI。
下面是一些相關(guān)的參考資料:

Google - 打造適用于可折疊設(shè)備的應(yīng)用
華為折疊屏應(yīng)用開發(fā)指導(dǎo)
三星折疊屏應(yīng)用開發(fā)指導(dǎo)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android XListView下拉刷新和上拉加載更多

    Android XListView下拉刷新和上拉加載更多

    這篇文章主要為大家詳細(xì)介紹了Android XListView下拉刷新和上拉加載更多,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android連接MySQL數(shù)據(jù)庫(kù)并進(jìn)行增刪改查操作示例講解

    Android連接MySQL數(shù)據(jù)庫(kù)并進(jìn)行增刪改查操作示例講解

    這篇文章主要介紹了Android 連接MySQL數(shù)據(jù)庫(kù)并進(jìn)行增刪改查操作示例講解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 基于RxJava實(shí)現(xiàn)酷炫啟動(dòng)頁(yè)

    基于RxJava實(shí)現(xiàn)酷炫啟動(dòng)頁(yè)

    本文介紹怎樣利用RxJava來(lái)實(shí)現(xiàn)Android的啟動(dòng)頁(yè),啟動(dòng)頁(yè)的效果非???,有需要的朋友們可以參考。
    2016-07-07
  • android創(chuàng)建optionsmenu的方法

    android創(chuàng)建optionsmenu的方法

    這篇文章主要介紹了android創(chuàng)建optionsmenu的方法,實(shí)例分析了Android菜單項(xiàng)的設(shè)置與創(chuàng)建技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Android實(shí)現(xiàn)掃一掃功能之繪制指定區(qū)域透明區(qū)域

    Android實(shí)現(xiàn)掃一掃功能之繪制指定區(qū)域透明區(qū)域

    這篇文章主要給大家介紹了關(guān)于Android實(shí)現(xiàn)掃一掃功能之繪制指定區(qū)域透明區(qū)域的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2018-07-07
  • 融會(huì)貫通Android?Jetpack?Compose中的Snackbar

    融會(huì)貫通Android?Jetpack?Compose中的Snackbar

    這篇文章主要為大家介紹了融會(huì)貫通Android?Jetpack?Compose中的Snackbar方法及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Android編程實(shí)現(xiàn)只顯示圖片一部分的方法

    Android編程實(shí)現(xiàn)只顯示圖片一部分的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)只顯示圖片一部分的方法,涉及Android針對(duì)圖片的局部顯示操作技巧,需要的朋友可以參考下
    2016-10-10
  • Android開發(fā)apk反編譯和二次打包教程

    Android開發(fā)apk反編譯和二次打包教程

    反編譯不是讓各位開發(fā)者去對(duì)一個(gè)應(yīng)用破解搞重裝什么的,主要目的是為了促進(jìn)開發(fā)者學(xué)習(xí),借鑒好的代碼,提升自我開發(fā)水平。下面我們就來(lái)研究下如何進(jìn)行APK反編譯以及二次打包
    2016-04-04
  • Android輕松實(shí)現(xiàn)多語(yǔ)言的方法示例

    Android輕松實(shí)現(xiàn)多語(yǔ)言的方法示例

    本篇文章主要介紹了Android輕松實(shí)現(xiàn)多語(yǔ)言的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • Android 線程thread的兩種實(shí)現(xiàn)方法(必看)

    Android 線程thread的兩種實(shí)現(xiàn)方法(必看)

    下面小編就為大家?guī)?lái)一篇Android 線程thread的兩種實(shí)現(xiàn)方法(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02

最新評(píng)論