2013-07-31 60 views
2

我已經看到大量不同的問題和答案,用於檢索視圖的高度和寬度的問題,特別是this線程。獲取視圖尺寸的最佳做法,可能在它們被繪製到屏幕之前

下面是提到的方法來檢索查看維度:您的活動

  • 子類的類型來看你使用和overridding

    1. onWindowFocusChanged()或者onSizeChanged(),onLayout(),或onMeasure()
    2. 使用ViewTreeObserver和addOnGlobalLayoutListener()

    他們每個人都似乎在某些情況下工作,而在其他情況下,人們說someth ing不能正常工作。由於對於View類沒有setOnDimensionsKnown(OnDimensionsKnown odk)或類似的方法,所以這些方法中的哪一個(或者可能沒有提到的一個)會給我我的視圖最終會有的尺寸,無論它是否被繪製,都有wrap_content或fill_parent參數,還是有明確的高度和寬度設置爲px,dp或類似?

    編輯:也許一個具體的例子將是有益的,我試圖做一個PopupWindow包裹它的內容,並通過它的寬度值在-x方向偏移。問題是內容的寬度,因此popupwindows的寬度,直到我顯示彈出窗口後才被測量。所以基本上我想不出一個好的方法來測量它在繪製到屏幕之前的寬度。

    我通常的做法是重寫任何視圖類,我需要繪製之前的維度,並創建我自己的setOnDimensionsKnown(OnDimensionsKnown odk)方法,並使用調用onMeasure時調用的寬度和高度值。這適用於我需要的每一種情況,但重寫每個視圖類並不是很優雅。

    我可以發佈代碼來幫助解釋更多的例子。

  • 回答

    0

    這樣做的好方法是在視圖中添加OnGlobalLayoutListener(),如this answer(問題中的第3點,我認爲這對於任何View最可靠)中所述。我做了PopupWindow的方法是誇大它的佈局,然後調用measure它:

    popupView = getActivity().getLayoutInflater().inflate(R.layout.popup_layout, null); 
    popup = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true); 
    popupView.measure(view.getMeasuredWidth(), view.getMeasuredHeight()); //the view is parent's layout (not sure if those are correct values, but it measures okay in my case) 
    

    ,然後就通過調用popupView.getMeasuredHeight().getMeasuredWitdh()得到的數字。

    您的問題現在可能早已消失,但希望別人會偶然發現並找到它有幫助。 :)