欧美三级电影完整|亚洲一二三四久久|性爱视频精品一区二区免费在线观看|国产精品啪啪视频|婷婷六月综合操人妻视频网站|99爱免费视频在线观看|美女一级片在线观看|北京熟女88av|免费看黄色A级电影|欧美黄色毛片儿

Android 劉海屏的適配與處理

2023-04-12


劉海屏:


劉海屏是指某些設(shè)備顯示屏上的一個(gè)區(qū)域延伸到顯示面,這樣既能為用戶提供全面屏體驗(yàn),又能為設(shè)備正面的重要傳感器留出空間。Android 在搭載 Android 9(API 級別 28)及更高版本的設(shè)備上正式支持劉海屏。請注意,設(shè)備制造商也可以選擇在搭載 Android 8.1 或更低版本的設(shè)備上支持劉海屏


在帶劉海屏的設(shè)備上有什么要求


為了確保一致性和應(yīng)用兼容性,搭載 Android 9 的設(shè)備必須確保以下劉海行為:


  • 一條邊緣最多只能包含一個(gè)劉海。
  • 一臺設(shè)備不能有兩個(gè)以上的劉海。
  • 設(shè)備的兩條較長邊緣上不能有劉海。
  • 在未設(shè)置特殊標(biāo)志的豎屏模式下,狀態(tài)欄的高度必須至少與劉海的高度持平。
  • 默認(rèn)情況下,在全屏模式或橫屏模式下,整個(gè)劉海區(qū)域必須顯示黑邊。

如何處理劉海區(qū)域:


要將內(nèi)容呈現(xiàn)到劉海區(qū)域中,則可以使用WindowInsets.getDisplayCutout()來檢索DisplayCutout對象




View decorView = getWindow().getDecorView();
if (decorView != null) {
    WindowInsets insets=  decorView.getRootWindowInsets();

}


如果不希望內(nèi)容與劉海區(qū)域重疊,請確保您的內(nèi)容不與狀態(tài)欄和導(dǎo)航欄重疊


窗口布局屬性layoutInDisplayCutoutMode控制您的內(nèi)容如何呈現(xiàn)在劉海區(qū)域中:


LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT - 這是默認(rèn)行為,如上所述。在豎屏模式下,內(nèi)容會呈現(xiàn)到劉海區(qū)域中;但在橫屏模式下,內(nèi)容會顯示黑邊。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES - 在豎屏模式和橫屏模式下,內(nèi)容都會呈現(xiàn)到劉海區(qū)域中。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER - 內(nèi)容從不呈現(xiàn)到劉海區(qū)域中。






將內(nèi)容呈現(xiàn)在短邊劉海區(qū)域中

對于某些內(nèi)容(如視頻、照片、地圖和游戲),呈現(xiàn)在劉海區(qū)域中是一種很好的方法,這樣能夠?yàn)橛脩籼峁┏两懈鼜?qiáng)的全面屏體驗(yàn)


如果設(shè)置了LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES,則在豎屏模式和橫屏模式下,內(nèi)容都會延伸到顯示屏的短邊上的劉海區(qū)域,而不管系統(tǒng)欄處于隱藏還是可見狀態(tài)


【*請注意,Android 可能不允許內(nèi)容視圖與系統(tǒng)欄重疊。要替換此行為并強(qiáng)制內(nèi)容延伸到劉海區(qū)域,請通過View.setSystemUiVisibility(int)方法將以下任一標(biāo)志應(yīng)用于視圖可見性】


  • SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
  • SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
  • SYSTEM_UI_FLAG_LAYOUT_STABLE

如果設(shè)置了LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER,則不允許窗口與劉海區(qū)域重疊。


此模式應(yīng)該用于暫時(shí)設(shè)置View.SYSTEM_UI_FLAG_FULLSCREEN或View.SYSTEM_UI_FLAG_HIDE_NAVIGATION的窗口,以避免在設(shè)置或清除了該標(biāo)志時(shí)執(zhí)行另一種窗口布局。


支持劉海屏的最佳做法


1.不要讓劉海區(qū)域遮蓋任何重要的文本、控件或其他信息。


2.不要將任何需要精細(xì)輕觸識別的交互式元素放置或延伸到劉海區(qū)域。劉海區(qū)域中的輕觸靈敏度可能要比其他區(qū)域低一些。


3.避免對狀態(tài)欄高度進(jìn)行硬編碼,因?yàn)檫@樣做可能會導(dǎo)致內(nèi)容重疊或被切斷。如有可能,請使用WindowInsetsCompat檢索狀態(tài)欄高度,并確定要對您的內(nèi)容應(yīng)用的適當(dāng)內(nèi)邊距。



WindowInsets insets= getWindow().getDecorView().getRootWindowInsets();
if (insets==null)
    return;
int stateTop=insets.getStableInsetTop();
int windowTop=insets.getSystemWindowInsetTop();



4.不要假定應(yīng)用會占據(jù)整個(gè)窗口,而應(yīng)使用View.getLocationInWindow()來確認(rèn)應(yīng)用的位置。不要使用View.getLocationOnScreen()。


5.如果您的應(yīng)用需要進(jìn)入和退出全屏模式,請使用shortEdgesnever劉海模式。默認(rèn)劉海行為可導(dǎo)致應(yīng)用中的內(nèi)容在全屏模式轉(zhuǎn)換過程中上下移動


6.在全屏模式下,在使用窗口坐標(biāo)與屏幕坐標(biāo)時(shí)應(yīng)保持謹(jǐn)慎,因?yàn)樵陲@示黑邊的情況下,您的應(yīng)用不會占據(jù)整個(gè)屏幕。由于顯示黑邊,因此根據(jù)屏幕原點(diǎn)得到的坐標(biāo)與根據(jù)窗口原點(diǎn)得到的坐標(biāo)不再相同。您可以根據(jù)需要使用getLocationOnScreen()將屏幕坐標(biāo)轉(zhuǎn)換為視圖坐標(biāo)


本文僅代表作者觀點(diǎn),版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請?jiān)谖闹凶⒚鱽碓醇白髡呙帧?/p>

免責(zé)聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請及時(shí)與我們聯(lián)系進(jìn)行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com