2011-10-05 83 views
5

我有它使用getWindowVisibleDisplayFrame()在Android 2.2系統,2.3(而不是2.3.3)給出了不同的值

getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle); 

,以確定可用的屏幕空間,並決定在何處放置圖像的Activity

久違的活動我點擊硬件後,「後退」按鈕離開Activity,矩形值

(0,0,800,480) 

然而,久違的活動我點擊硬件「家」按鈕後離開的Activity,矩形值是

(0,38,800,480) 

會拋出關閉顯示器和圖像位置。

我怎樣才能保證我得到一個一致的值調用

getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle); 

時,不管我怎麼離開應用程序?

更新:感謝@Reno幫助測試;它似乎依賴於Android版本而不是設備。

+0

我想要你的幫助 –

回答

4

韋爾普,如果你看過在源的意見,但也承認,這種方法是一種打破

public void getWindowVisibleDisplayFrame(Rect outRect) { 
    if (mAttachInfo != null) { 
     try { 
      mAttachInfo.mSession.getDisplayFrame(mAttachInfo.mWindow, outRect); 
     } catch (RemoteException e) { 
      return; 
     } 
     // XXX This is really broken, and probably all needs to be done 
     // in the window manager, and we need to know more about whether 
     // we want the area behind or in front of the IME. 
     final Rect insets = mAttachInfo.mVisibleInsets; 
     outRect.left += insets.left; 
     outRect.top += insets.top; 
     outRect.right -= insets.right; 
     outRect.bottom -= insets.bottom; 
     return; 
    } 

你將不得不忽略< 2.3.3

+0

謝謝。另外,爲「Welp」+1 +1 –

+0

爲什麼忽略outRect.top版本<2.3.3?在版本> 2.3.3(xoom,nexus 7 ...)上運行時,我會看到非零值,並將最高狀態欄考慮在內。我沒有運行<2.3.3的設備,但是當我運行模擬器時,我看到了同樣的情況。我只是希望獲得可用區域的當前高度和寬度,並且getWindowVisibleDisplayFrame()似乎是一致的,但聽起來您已經看到了不同的東西。謝謝。 – SkolVikingsGuy

0
版本outRect.top值

所以,我這樣做:

Rect rectangle = new Rect(); 
    getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle); 
    if(android.os.Build.VERSION.SDK_INT < 9 /* android.os.Build.VERSION_CODES.GINGERBREAD */) { 
     // http://stackoverflow.com/questions/7659652/getwindowvisibledisplayframe-gives-different-values-in-android-2-2-2-3-but-no/7660204#7660204 
     rectangle.top = 0; 
    } 
+0

我並不完全關注該問題,但我想使用getWindowVisibleDisplayFrame()來獲取我的應用程序可用區域減去所有狀態欄。現在,我爲所有版本的android調用getWindow()getDecorView()。getWindowVisibleDisplayFrame(),並且它工作正常,當頂部有一個狀態欄時,它具有非零'top'值。此代碼在所有版本的Android上都可靠嗎?注意:當用戶點擊一個按鈕時,我會打電話給他。 – SkolVikingsGuy

+0

我不知道。 –

+0

您提到了「更新:感謝@Reno幫助測試;它似乎依賴於Android版本,而不是設備。」,您能否幫我解決問題並讓我知道版本中的差異?我只是很緊張,一個版本會返回沒有狀態欄的屏幕大小,一個會返回狀態欄的矩形。謝謝。 – SkolVikingsGuy

0

有些時候,你需要在一個活動的onCreate當知道可用空間的精確尺寸的佈局。 經過一番思考,我找到了這樣做的方法:https://stackoverflow.com/a/16691531/2202013 它不使用getWindowVisibleDisplayFrame,並希望能夠在將來證明。

1

here是直接獲取狀態欄而不是計算它的鏈接。它將避免getWindowVisibleDisplayFrame在平臺和設備上真正不一致的問題。

相關問題