android 獲取屏幕相關(guān)高度

1.屏幕高度是由三部分組成:actionBar,titleBar,content
Rect rect = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
獲取actionBar的高度 :rect.top();
獲取content的高度:rect.height();

    getWindow().getDecorView().addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
         @Override
         public void onLayoutChange(View view, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
         //當(dāng)layout發(fā)生變化時(shí)需要處理的內(nèi)容
         }
    });

?一般情況下監(jiān)聽整個(gè)window布局發(fā)生變化可能會(huì)產(chǎn)生因?yàn)閘ayout一直變化導(dǎo)致回調(diào)次數(shù)變多,尤其是在scrollview的addOnLayoutChangeListener監(jiān)聽,會(huì)因?yàn)樽兓瘜?dǎo)致多次調(diào)用。故在監(jiān)聽中對(duì)一些固定的view進(jìn)行監(jiān)聽,從而避免多次回調(diào)問(wèn)題的產(chǎn)生。
<pre>
int actionBarId = Resources.getSystem().getIdentifier("split_action_bar","id","android");
View decorView = findViewById(actionBarId);
decorView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View view, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
LinearLayout.LayoutParams params=(LinearLayout.LayoutParams)mContentScroller.getLayoutParams();
if(oldBottom !=0 && bottom !=0 && (bottom - oldBottom)>0){
params.bottomMargin = 0;
} else {
params.bottomMargin = (int)getResources().getDimension(R.dimen.novirtual_content_height);
}
mContentScroller.setLayoutParams(params);
}
});</pre>
//上述代碼中的bottom以及oldBottom,都是針對(duì)decorView位置的前后變化而言,即監(jiān)聽組件的前后bottom值。
2.此外其他對(duì)布局變化的方式包含有:
? onSizeChanged(Activity需要是AdjustResize的)
? onLayout(不用監(jiān)聽onMeasure,回調(diào)的位置太多了)
? addOnLayoutChangeListener監(jiān)聽layout的回調(diào)事件
? getViewTreeObserver().addOnGlobalLayoutListener監(jiān)聽全局的layout事件
可參考鏈接:http://blog.csdn.net/pouloghost/article/details/50971381

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,946評(píng)論 25 709
  • 實(shí)現(xiàn)輔助(外掛)參考地址:http://developer.android.com/training/access...
    AFinalStone閱讀 1,523評(píng)論 0 0
  • 屏幕物理寬高 一般來(lái)說(shuō)計(jì)算屏幕寬高都會(huì)使用以下方法: 但在有虛擬按鍵(NavigationBar)的屏幕上,不管是...
    ei_chinn閱讀 3,606評(píng)論 0 5
  • 喜歡聽趙詠華的《最浪漫的事》: 背靠著背 坐在地毯上 聽聽音樂(lè) 聊聊愿望 你希望我越來(lái)越溫柔 我希望你放我在心上 ...
    清揚(yáng)在諾閱讀 356評(píng)論 3 4
  • 文/張小木 后來(lái)的我們,都沒有再聯(lián)系,我不知道你過(guò)得怎樣,就算偶爾想起也只是用以前的記憶填補(bǔ),我能做的是再怎么想念...
    萵是張小木閱讀 314評(píng)論 0 0

友情鏈接更多精彩內(nèi)容