Android 获取视图尺寸的最佳实践,可能是在将其绘制到屏幕之前

Android 获取视图尺寸的最佳实践,可能是在将其绘制到屏幕之前,android,view,height,width,dimensions,Android,View,Height,Width,Dimensions,对于人们在检索视图的高度和宽度时遇到的问题,我看到了大量不同的问题和答案,尤其是线程 以下是检索视图标注的方法: 活动中的onWindowFocusChanged() 对正在使用的视图类型进行子类化,并覆盖onSizeChanged()、onLayout()或onMeasure() 使用ViewTreeObserver和addOnGlobalLayoutListener() 在某些情况下,它们似乎都起作用,而在另一些情况下,人们会说有些东西不能正常工作。由于视图类没有setOnDimension

对于人们在检索视图的高度和宽度时遇到的问题,我看到了大量不同的问题和答案,尤其是线程

以下是检索视图标注的方法:

  • 活动中的onWindowFocusChanged()
  • 对正在使用的视图类型进行子类化,并覆盖onSizeChanged()、onLayout()或onMeasure()
  • 使用ViewTreeObserver和addOnGlobalLayoutListener()
  • 在某些情况下,它们似乎都起作用,而在另一些情况下,人们会说有些东西不能正常工作。由于视图类没有setOnDimensionsKnown(OnDimensionsKnown odk)或类似的方法,这些方法中的哪一个(或可能没有提到的一个)将为我提供视图最终将具有的维度,无论它是否绘制,具有wrap\u content或fill\u父参数,或者它在px、dp中设置了显式的高度和宽度,还是类似的

    编辑:也许一个具体的例子会有所帮助,我正在尝试用弹出窗口包装它的内容,并用它的宽度值在-x方向上偏移。问题是,直到我显示弹出窗口后,才测量内容宽度,因此也就是PopupUpWindow宽度。所以基本上我想不出一个好方法来测量它在被画到屏幕上之前的宽度

    我通常的方法是在绘制之前覆盖任何需要标注的视图类,创建我自己的setOnDimensionsKnown(OnDimensionsKnown odk)方法,并使用onMeasure调用的宽度和高度值激发它。这在我需要的每种情况下都有效,但是覆盖每个视图类来完成这项工作似乎不是很优雅


    我可以发布代码来帮助进一步解释示例。

    好的方法是向视图中添加一个
    OnGlobalLayoutListener()
    ,如中所述(您问题中的第3点,我认为这对于任何
    视图来说都是最可靠的)。我为一个
    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.getmeasuredhight()
    .getMeasuredWitdh()
    获取数字

    您的问题可能早已过去,但希望其他人会偶然发现这一点,并发现它很有帮助。:)