獲取Android狀態欄高度的屢試不爽的方法


如下代碼所示:

[java]  view plain copy
  1. private int getStatusBarHeight() {  
  2.         Class<?> c = null;  
  3.   
  4.         Object obj = null;  
  5.   
  6.         Field field = null;  
  7.   
  8.         int x = 0, sbar = 0;  
  9.   
  10.         try {  
  11.   
  12.             c = Class.forName("com.android.internal.R$dimen");  
  13.   
  14.             obj = c.newInstance();  
  15.   
  16.             field = c.getField("status_bar_height");  
  17.   
  18.             x = Integer.parseInt(field.get(obj).toString());  
  19.   
  20.             sbar = getContext().getResources().getDimensionPixelSize(x);  
  21.   
  22.         } catch (Exception e1) {  
  23.   
  24.             e1.printStackTrace();  
  25.   
  26.         }  
  27.   
  28.         return sbar;  
  29.     }  

這是一個牛人想出的辦法。 方法有點二,主要原理是從系統R文件中找到dimen這個內部類,然后通過反射拿到dimen中的status_bar_height的值,這個值其實就是資源id,然后再通過getResource方法拿到該id對應的值,真所謂天衣無縫,無可挑剔! 此方法應該也適用於其他系統字段的值。


網絡上有很多介紹取狀態欄的方法,但有一定的局限性。比如:

狀態欄高度 
View的getWindowVisibleDisplayFrame(Rect outRect)附值outRect后,outRect.top()即是狀態欄高度

標題高度 
View的getWindowVisibleDisplayFrame(Rect outRect1)附值outRect后,outRect.height()-view.getheight()即是標題高度。


這種方式只適用於View已經繪制出來的情況下,才能拿到相應的值,而且如果我沒猜錯的話,這個view還應該填充屏幕。 但很多情況下我們的view根本還沒繪制出來前就需要拿到這個值,這時候這種方法就不靠譜了。


 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM