Android全面屏與異形(劉海)屏的適配教程
寫在前面
Android全面屏的手機越來越多了,要開始考慮應(yīng)用適配全面屏的問題了,查了查相關(guān)文章,總結(jié)一下.
聲明最大屏幕寬高比
以上圖片來自Google Developer
通過文檔可以看出從Android7.0開始,應(yīng)用的多窗口模式默認變?yōu)閱?在多窗口模式下,默認已經(jīng)進行了全面屏適配,如果我們不想應(yīng)用在多窗口模式下運行,可以修改以下屬性:
android:resizeableActivity="false"
此時,我們可以手動進行設(shè)置最大屏幕寬高比:
android8.0及以上:
<activity android:maxAspectRatio="2.4"> ... </activity>
android7.1及以下版本:
<meta-data android:name="android.max_aspect" android:value="2.4" />
需要注意的是,如果手動進行設(shè)置了最大寬高比,一定要將多窗口模式設(shè)置為false,否則不生效.
劉海屏
劉海屏適配分為全屏已適配劉海屏,全屏未適配劉海屏和非全屏頁面,
非全屏頁面
非全屏頁面即有狀態(tài)欄顯示的頁面,截止目前,基本上所有的劉海都只存在于狀態(tài)欄,所以非全屏頁面無需我們進行適配,系統(tǒng)會自動進行適配.
非全面屏
因為劉海也是黑色的,所以看上去沒有效果.
全屏未適配劉海屏頁面
全屏界面未適配劉海時,不能使用劉海區(qū)域,所以會出現(xiàn)出圖所示效果,嚴重時可能會將底部控件頂下去,為了解決這個問題,需要對其進行適配
全屏未適配劉海屏頁面
全屏適配劉海屏頁面
通過查看WindowManager的源碼可以看到共有3種顯示模式,:
//默認情況,全屏頁面不可用劉海區(qū)域,非全屏頁面可以進行使用 public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT = 0; //不允許使用劉海區(qū)域 public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER = 2; //允許頁面延伸到劉海區(qū)域 public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES = 1;
通過查看上面的文檔,則可以進行全屏界面的適配:
var lp = window.attributes lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES window.attributes = lp
全屏適配劉海屏頁面
以上方案是Google官方的適配方案,部分廠商并未使用此方案,而是使用自家API進行全面屏適配,詳情可以查看各手機廠商官方文檔.
OPPO:https://open.oppomobile.com/wiki/doc#id=10159
VIVO:https://dev.vivo.com.cn/doc/document/info?id=103
HUAWEI:https://mini.eastday.com/bdmip/180411011257629.html
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Retrofit 創(chuàng)建網(wǎng)絡(luò)請求接口實例過程
這篇文章主要為大家介紹了Retrofit 創(chuàng)建網(wǎng)絡(luò)請求接口實例過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12Android webview 內(nèi)存泄露的解決方法
這篇文章主要介紹了Android webview 內(nèi)存泄露的解決方法的相關(guān)資料,需要的朋友可以參考下2017-07-07Android連接MySQL數(shù)據(jù)庫并進行增刪改查操作示例講解
這篇文章主要介紹了Android 連接MySQL數(shù)據(jù)庫并進行增刪改查操作示例講解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08關(guān)于Android添加fragment后版本不兼容問題
這篇文章主要介紹了Android添加fragment后版本不兼容問題的解決方法,需要的朋友可以參考下2017-12-12Android之高德地圖定位SDK集成及地圖功能實現(xiàn)
本文主要介紹了Android中高德地圖定位SDK集成及地圖功能的實現(xiàn)。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04Android開發(fā)之RadioGroup的簡單使用與監(jiān)聽示例
這篇文章主要介紹了Android開發(fā)之RadioGroup的簡單使用與監(jiān)聽,結(jié)合實例形式分析了Android針對RadioGroup單選按鈕簡單實用技巧,需要的朋友可以參考下2017-07-07Android中Intent機制詳解及示例總結(jié)(總結(jié)篇)
本文是小編日常收集整理些有關(guān)Android中Intent機制詳解及示例總結(jié),對android中intent相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2016-04-04