最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android全面屏適配方法詳解

 更新時(shí)間:2022年11月25日 11:14:13   作者:時(shí)寒很苦惱  
Apple一直在引領(lǐng)設(shè)計(jì)的潮流,自從 iPhone X 發(fā)布之后,各種異形屏、劉海屏也都出來,下面這篇文章主要給大家分享介紹了關(guān)于Android全面屏與異形(劉海)屏的適配教程,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

測(cè)試機(jī):

  • Android 11 的 Xiaomi MI MAX 3
  • Android 12 的 Xiaomi K40 Pro

測(cè)試方法

1. 該方法在api30后提示已經(jīng)過時(shí) 在onCreat()方法中,setContentView()前使用。

window.setFlags(
    WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN
)

測(cè)試結(jié)果:Android11和Android12均有效,但Android12的挖孔屏區(qū)域無效

2. 沉浸模式-查詢到:Android系統(tǒng)到了4.4以后才提供沉浸式體驗(yàn)的支持。當(dāng)設(shè)置透明效果后,4.4以下無效果,4.4~5.0全透明,5.0以上半透明;Android沉浸式模式的本質(zhì)就是全屏化。

	//該方法是從官網(wǎng)復(fù)制過來的,效果不如意
    private fun hideSystemBars() {
        val windowInsetsController =
            ViewCompat.getWindowInsetsController(window.decorView) ?: return
        // Configure the behavior of the hidden system bars
        windowInsetsController.systemBarsBehavior =
            WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
        // Hide both the status bar and the navigation bar
        windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
    }

測(cè)試結(jié)果:Android11無效,Android12有效,Android12的挖孔屏區(qū)域無效。Android11獲取windowInsetsController為null

	//這是從別人那里拷過來的(csdn):https://blog.csdn.net/qq_32664007/article/details/126279919
    private fun hideSystemBars(window: Window) {
        //隱藏狀態(tài)欄和導(dǎo)航欄 以及交互
        WindowInsetsControllerCompat(window, window.decorView).let {
            //隱藏狀態(tài)欄和導(dǎo)航欄
            it.hide(WindowInsetsCompat.Type.systemBars())
            //交互效果
            it.systemBarsBehavior =
                WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
        }
    }

測(cè)試結(jié)果:Android11無效,Android12有效,Android12的挖孔屏區(qū)域無效。

3.該方法在ide里提示已過時(shí),在官網(wǎng)上未提示

val decorView = window.decorView
decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_FULLSCREEN
        or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)

測(cè)試結(jié)果:Android11和Android12均有效,但Android12的挖孔屏區(qū)域無效

4.該方法對(duì)測(cè)試機(jī)均有部分效過

WindowCompat.setDecorFitsSystemWindows(window, false)

測(cè)試結(jié)果:Android11和Android12的activity繪制區(qū)域均將狀態(tài)欄的區(qū)域繪制成功,但狀態(tài)欄依然透明顯示,Android12的挖孔屏區(qū)域無效,效果如圖(按鈕繪制在狀態(tài)欄的位置上):

5.使用主題

<item name="android:windowFullscreen">true</item>

測(cè)試結(jié)果:Android11有效,Android12有效,Android12的挖孔屏區(qū)域無效。

6.挖孔屏處理方式

//允許window 的內(nèi)容可以上移到劉海屏狀態(tài)欄
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    val lp = window.attributes
    lp.layoutInDisplayCutoutMode =
        WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
    window.attributes = lp
}

測(cè)試結(jié)果:Android12 挖孔屏有效

封裝成工具類

/**
 * 沉浸模式(全屏模式)
 * 設(shè)置全屏的方法
 * 參數(shù)window在activity或AppCompatActivity都帶有
 */
fun immersionFull(window: Window) {
    hideSystemBars(window)
    useSpecialScreen(window)
}
/**
 * 隱藏狀態(tài)欄,顯示內(nèi)容上移到狀態(tài)欄
 */
private fun hideSystemBars(window: Window) {
    //占滿全屏,activity繪制將狀態(tài)欄也加入繪制范圍。
    //如此即使使用BEHAVIOR_SHOW_BARS_BY_SWIPE或BEHAVIOR_SHOW_BARS_BY_TOUCH
    //也不會(huì)因?yàn)闋顟B(tài)欄的顯示而導(dǎo)致activity的繪制區(qū)域出現(xiàn)變形
    //使用劉海屏也需要這一句進(jìn)行全屏處理
    WindowCompat.setDecorFitsSystemWindows(window, false)
    //隱藏狀態(tài)欄和導(dǎo)航欄 以及交互
    WindowInsetsControllerCompat(window, window.decorView).let {
        //隱藏狀態(tài)欄和導(dǎo)航欄
        //用于WindowInsetsCompat.Type.systemBars()隱藏兩個(gè)系統(tǒng)欄
        //用于WindowInsetsCompat.Type.statusBars()僅隱藏狀態(tài)欄
        //用于WindowInsetsCompat.Type.navigationBars()僅隱藏導(dǎo)航欄
        it.hide(WindowInsetsCompat.Type.systemBars())
        //交互效果
        //BEHAVIOR_SHOW_BARS_BY_SWIPE 下拉狀態(tài)欄操作可能會(huì)導(dǎo)致activity畫面變形
        //BEHAVIOR_SHOW_BARS_BY_TOUCH 未測(cè)試到與BEHAVIOR_SHOW_BARS_BY_SWIPE的明顯差異
        //BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE 下拉或上拉的屏幕交互操作會(huì)顯示狀態(tài)欄和導(dǎo)航欄
        it.systemBarsBehavior =
            WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
    }
}
/**
 * 擴(kuò)展使用劉海屏
 */
private fun useSpecialScreen(window: Window) {
    //允許window 的內(nèi)容可以上移到劉海屏狀態(tài)欄
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        val lp = window.attributes
        lp.layoutInDisplayCutoutMode =
            WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
        window.attributes = lp
    }
}

然后資源目錄的主題文件里添加(res->values->themes.xml):

<!-- 導(dǎo)航欄透明 -->
<item name="android:navigationBarColor">
    @android:color/transparent
</item>
<!-- 狀態(tài)欄透明 -->
<item name="android:statusBarColor">
    @android:color/transparent
</item>
<!-- 不要標(biāo)題欄 -->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

到此這篇關(guān)于Android全面屏適配方法詳解的文章就介紹到這了,更多相關(guān)Android全面屏適配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android實(shí)現(xiàn)京東首頁(yè)效果

    Android實(shí)現(xiàn)京東首頁(yè)效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)京東首頁(yè)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Android開發(fā)之毛玻璃效果實(shí)例代碼

    Android開發(fā)之毛玻璃效果實(shí)例代碼

    這篇文章主要給大家分享android開發(fā)之毛玻璃效果的實(shí)例代碼,非常具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • 談?wù)凙ndroid中的Divider是個(gè)什么東東

    談?wù)凙ndroid中的Divider是個(gè)什么東東

    在Android應(yīng)用開發(fā)中會(huì)經(jīng)常碰到一個(gè)叫divider的東西,就是兩個(gè)View之間的分割線,本文主要給大家介紹android中的divider相關(guān)知識(shí),需要的朋友可以參考下
    2016-03-03
  • Android編程實(shí)現(xiàn)圖片的上傳和下載功能示例

    Android編程實(shí)現(xiàn)圖片的上傳和下載功能示例

    這篇文章主要介紹了Android編程實(shí)現(xiàn)圖片的上傳和下載功能,涉及Android針對(duì)圖片的字節(jié)流轉(zhuǎn)換與傳輸操作相關(guān)技巧,需要的朋友可以參考下
    2016-10-10
  • Kotlin?lambda表達(dá)式入門指南

    Kotlin?lambda表達(dá)式入門指南

    在kotlin當(dāng)中,Lambda表達(dá)式是最高等級(jí)的,Lambda表達(dá)式可以理解為一種匿名函數(shù),是一種高效的類似于函數(shù)式編程的表達(dá)式,本文介紹Kotlin?lambda表達(dá)式入門指南,感興趣的朋友一起看看吧
    2024-03-03
  • Android的APK應(yīng)用簽名機(jī)制以及讀取簽名的方法

    Android的APK應(yīng)用簽名機(jī)制以及讀取簽名的方法

    這篇文章主要介紹了Android的APK應(yīng)用簽名機(jī)制以及讀取簽名的方法,這里作者推薦使用Java自帶的API進(jìn)行APK簽名的讀取,需要的朋友可以參考下
    2016-02-02
  • 如何在Android中實(shí)現(xiàn)一個(gè)簡(jiǎn)易的Http服務(wù)器

    如何在Android中實(shí)現(xiàn)一個(gè)簡(jiǎn)易的Http服務(wù)器

    這篇文章主要介紹了如何在Android中實(shí)現(xiàn)一個(gè)簡(jiǎn)易的Http服務(wù)器,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Android Studio實(shí)現(xiàn)下拉列表效果

    Android Studio實(shí)現(xiàn)下拉列表效果

    這篇文章主要為大家詳細(xì)介紹了Android Studio實(shí)現(xiàn)下拉列表效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android  TextView中部分文字高亮顯示

    Android TextView中部分文字高亮顯示

    這篇文章主要介紹了Android TextView中部分文字高亮顯示的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 一篇文章就能了解Rxjava

    一篇文章就能了解Rxjava

    最近偶然接觸到了rxjava。關(guān)于rxjava,褒貶不一,有人說好用,有人說難用,不過它到底是什么?它有什么用?接下來,本文通過部分代碼及分析,向大家介紹rxjava及其相關(guān)內(nèi)容。
    2017-10-10

最新評(píng)論

太康县| 镇宁| 南溪县| 化德县| 金秀| 桃源县| 施秉县| 博兴县| 桐城市| 婺源县| 双江| 五莲县| 固始县| 琼海市| 德阳市| 马龙县| 北辰区| 沿河| 繁峙县| 卓尼县| 沛县| 遵义市| 盈江县| 东安县| 万安县| 商水县| 舒兰市| 久治县| 常德市| 灵璧县| 汉中市| 桐梓县| 唐河县| 休宁县| 甘德县| 来安县| 仁布县| 海丰县| 卓尼县| 巢湖市| 武平县|