第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

全面屏高度問(wèn)題適配

標(biāo)簽:
Android

项目中有页面根据屏幕高度来计算 View 在屏幕中的位置,结果在 Essential Phone 和小米 MIX 2S 中出现问题,看用户评论在一加 5T 中也有问题,这几个手机都是全面屏,官方方案出来前,各家自己瞎搞。

然后定位问题,发现原来代码计算高度是这样的:

context.getResources().getDisplayMetrics().heightPixels - getStatusBarHeight(context);

而问题就出现在减去状态栏高度这里,过去的手机 heightPixels 减去状态栏高度就是可用高度,但这几个手机,heightPixels 就是可用高度,状态栏高度一减,以为可用的就比实际可用的要小一个状态栏高度。

最初搜索也并未找到可以解决这个问题的方案,作为临时适配,通过 Build 判断手机品牌或型号来适配,但手机越来越多,这终究不能作为最终的解决方案。

  • DecorView 的高度是包括状态栏和导航栏的高度,算出来就是手机硬件参数的那个高度。
  • RootView 的高度就是自己写的 View 的高度,如果 setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION),那么 RootView 高度等于 DecorView 高度,如果没有隐藏导航或状态栏,就是从 DecorView 高度减去对应高度。
  • context.getResources().getDisplayMetrics().heightPixels 的注释是 The absolute height of the available display size in pixels.,在过去的手机上它等于 RootView 的高度加状态栏高度。

当然如果设置了 Flag,这几个值的关系会有变化。

int heightPixels = getResources().getDisplayMetrics().heightPixels;
Log.e("OMG", "heightPixels:" + heightPixels);
int statusBarHeight = getResources().getDimensionPixelSize(getResources().getIdentifier("status_bar_height", "dimen", "android"));
Log.e("OMG", "statusBarHeight:" + statusBarHeight);
int navigationBarHeight = getResources().getDimensionPixelSize(getResources().getIdentifier("navigation_bar_height", "dimen", "android"));
Log.e("OMG", "navigationBarHeight:" + navigationBarHeight);

final View decorView = getWindow().getDecorView();
final View rootView = getWindow().findViewById(Window.ID_ANDROID_CONTENT);
rootView.post(new Runnable() {
    @Override
    public void run() {
        // 渲染后求高度
        Log.e("OMG", "decorViewHeight:" + decorView.getHeight());
        Log.e("OMG", "rootViewHeight:" + rootView.getHeight());
    }
});

Nexus 5X 的结果是:

  • heightPixels:1794
  • statusBarHeight:63
  • navigationBarHeight:126
  • decorViewHeight:1920
  • rootViewHeight:1731

显然 heightPixels = rootViewHeight + statusBarHeight,heightPixels + navigationBarHeight = decorViewHeight

而对于全面屏手机,区别在于获取的 heightPixels = rootViewHeight。

點(diǎn)擊查看更多內(nèi)容
5人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
移動(dòng)開發(fā)工程師
手記
粉絲
4
獲贊與收藏
23

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消