Android全面屏劉海適配

maxAspectRatio

根據(jù)谷歌兼容性(CTS)標(biāo)準(zhǔn)要求,應(yīng)用必須按以下方式中的任意一種蔗包,在AndroidManifest.xml中配置方可全屏顯示卖丸,否則將以非全屏顯示笛求。

方式一:配置支持最大高寬比

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

* android:maxAspectRatio="ratio_float"   (API LEVEL 26)

說明:以上兩種接口可以二選一,ratio_float = 屏幕高 / 屏幕寬 (如oppo新機(jī)型屏幕分辨率為2280 x 1080材蛛, ratio_float = 2280 / 1080 = 2.11贰您,建議設(shè)置 ratio_float為2.2或者更大)
方式二:支持分屏,注意驗證分屏下界面兼容性

android:resizeableActivity="true"

建議采用方式二適配支持全面屏揍拆。

詳見官方文檔:https://source.android.google.cn/compatibility/cdd?hl=zh-cn

重要提醒
  • 如果應(yīng)用要支持分屏功能渠概,則直接采用方式二,既支持了分屏嫂拴,又適配和兼容了全面屏播揪;
  • 如果應(yīng)用不支持分屏功能,設(shè)置了android:resizeableActivity="false" 筒狠,則必須采用方式一來適配全面屏猪狈,否則會出現(xiàn)如下問題:
全面屏不適配出現(xiàn)的問題

底部虛擬導(dǎo)航欄可能會透明或者是黑色的,原因是因為app的布局最大比例不夠辩恼,不能夠自動適配,如下圖:


圖1.jpg

所以當(dāng)視頻播放器全屏的時候雇庙,會看有右邊圈出的部分有間隔,無法鋪滿全屏


圖2.jpg

如果代碼中設(shè)置之后,則能自動鋪滿全屏灶伊,不會透明或者預(yù)留間距:

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

看如下效果圖:


sssda.jpg

sssssss.jpg

Android P全面屏適配

// 谷歌官方提供的默認(rèn)適配劉海屏

WindowManager.LayoutParams lp =getWindow().getAttributes();
lp.layoutInDisplayCutoutMode=WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
getWindow().setAttributes(lp);

// 窗口聲明使用劉海區(qū)域
public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS = 1;
// 默認(rèn)情況下疆前,全屏窗口不會使用到劉海區(qū)域,非全屏窗口可正常使用劉海區(qū)域
public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT = 0;
// 聲明不使用劉海區(qū)域
public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER = 2;

Android P獲取劉海高度
劉海屏的凹槽聘萨,就在屏幕的中間竹椒,所以只有g(shù)etSafeInsetTop()方法返回的結(jié)果,是我們需要的米辐,其他的正常返回0

class WindowInsets {

DisplayCutout getDisplayCutout();

}

class DisplayCutout {

int getSafeInsetLeft();

int getSafeInsetTop();

int getSafeInsetRight();

int getSafeInsetBottom();

Region getBounds();

}

華為手機(jī)適配

官網(wǎng)地址:https://mini.eastday.com/bdmip/180411011257629.html

 //判斷是否是華為劉海屏
    public static boolean isHuaweiScreenHasGroove(Context context) {
        boolean ret = false;
        try {
            ClassLoader cl = context.getClassLoader();
            Class HwNotchSizeUtil = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil");
            Method get = HwNotchSizeUtil.getMethod("hasNotchInScreen");
            ret = (boolean) get.invoke(HwNotchSizeUtil);
       } catch (Exception e) {

        } finally {
            return ret;
        }
    }

    //獲取華為劉海的高寬
    public static int[] getHuaweiNotchSize(Context context) {
        int[] ret = new int[]{0, 0};
        try {
            ClassLoader cl = context.getClassLoader();
            Class HwNotchSizeUtil = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil");
            Method get = HwNotchSizeUtil.getMethod("getNotchSize");
            ret = (int[]) get.invoke(HwNotchSizeUtil);
        }  catch (Exception e) {

        } finally {
            return ret;
        }
    }

Oppo劉海適配

官網(wǎng)地址:https://open.oppomobile.com/wiki/doc#id=10159

//判斷手機(jī)是否有劉海
 public static boolean isOppoScreenHasGroove(Context context) {
        boolean isHasGroove = context.getPackageManager().hasSystemFeature("com.oppo.feature.screen.heteromorphism");
        return isHasGroove;
    }


劉海高度固定:80px

VIVO手機(jī)劉海適配

官網(wǎng)地址:https://dev.vivo.com.cn/doc/document/info?id=103

 //判斷是否是voio劉海屏
    public static final int NOTCH_IN_SCREEN_VOIO = 0x00000020;//是否有凹槽
    public static final int ROUNDED_IN_SCREEN_VOIO = 0x00000008;//是否有圓角

    public static boolean isVoioScreenHasGroove(Context context) {
        boolean ret = false;
        try {
            ClassLoader cl = context.getClassLoader();
            Class FtFeature = cl.loadClass("com.util.FtFeature");
            Method get = FtFeature.getMethod("isFeatureSupport", int.class);
            ret = (boolean) get.invoke(FtFeature, NOTCH_IN_SCREEN_VOIO);
        }  catch (Exception e) {

        } finally {
            return ret;
        }
    }

四周圓角高度:25dp
劉海高度:27dp
狀態(tài)欄高度:32dp

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胸完,一起剝皮案震驚了整個濱河市书释,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舶吗,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件择膝,死亡現(xiàn)場離奇詭異誓琼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肴捉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門腹侣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人齿穗,你說我怎么就攤上這事傲隶。” “怎么了窃页?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵跺株,是天一觀的道長。 經(jīng)常有香客問我脖卖,道長乒省,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任畦木,我火速辦了婚禮袖扛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘十籍。我一直安慰自己蛆封,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布勾栗。 她就那樣靜靜地躺著惨篱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪围俘。 梳的紋絲不亂的頭發(fā)上妒蛇,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機(jī)與錄音楷拳,去河邊找鬼绣夺。 笑死,一個胖子當(dāng)著我的面吹牛欢揖,可吹牛的內(nèi)容都是我干的陶耍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼她混,長吁一口氣:“原來是場噩夢啊……” “哼烈钞!你這毒婦竟也來了泊碑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤毯欣,失蹤者是張志新(化名)和其女友劉穎馒过,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酗钞,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腹忽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了砚作。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窘奏。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖葫录,靈堂內(nèi)的尸體忽然破棺而出着裹,到底是詐尸還是另有隱情,我是刑警寧澤米同,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布骇扇,位于F島的核電站,受9級特大地震影響面粮,放射性物質(zhì)發(fā)生泄漏匠题。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一但金、第九天 我趴在偏房一處隱蔽的房頂上張望韭山。 院中可真熱鬧,春花似錦冷溃、人聲如沸钱磅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盖淡。三九已至,卻和暖如春凿歼,著一層夾襖步出監(jiān)牢的瞬間褪迟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工答憔, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留味赃,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓虐拓,卻偏偏與公主長得像心俗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容