2013-02-07 29 views
2

我有一個應用程序,用戶在圖庫中選擇圖片或從圖片中選擇圖片。在下一頁中,我使用onGlobalLayout來確定View的大小。當用戶從圖庫中選取圖片時,View尺寸在onGlobalLayout中正確返回。但是,當用戶拍攝照片時,頂部的Status Bar不可見。當下一個活動出現時,Status Bar從頂部滑入,從而改變屏幕大小,但onGlobalLayout未考慮此因素,因此返回錯誤的視圖大小。onGlobalLayout返回的視圖大小錯誤

這似乎是一個Android的錯誤,我正在考慮提交一個錯誤報告。但是,有沒有人有任何解決方法?

實施例:

public class MyView extends View implements OnGlobalLayoutListener { 

    @Override 
    public void onGlobalLayout() { 
     Log.d("MyView", "Width: " + getWidth()); 
     Log.d("MyView", "Height: " + getHeight()); 
    } 
} 

上面的代碼將返回兩個不同的寬度和高度取決於如果我從返回屏幕具有一個狀態欄或沒有。

感謝

+0

很難提出修正或解決方法,沒有任何代碼作爲起點。但我認爲你有什麼理由不能發佈? – anthropomo

+0

我已經添加了一個OnGlobalLayoutListener的基本示例...但是,我不能發佈完整的代碼,因爲它會太多(我不允許;)) – Nick

+0

你可以添加xml以便我們可以看到這個視圖在佈局? –

回答

0

您可以覆蓋fitSystemWindows在視圖中得到了StatusBar的大小,並相應計算你的視圖大小,見my answer here爲例。

根據設備屏幕密度,android根據預定義的列表status bar heights來調整尺寸,因爲android具有固定的狀態欄大小。

我不認爲這是在android中的錯誤。

+0

我可以找到狀態欄的高度,但是在某些情況下,狀態欄就在那裏,有些情況下不是。我可以發送包中的數據讓新的活動知道它來自哪裏,但是,如果可能的話,我寧願避免這種情況。 – Nick