1

我在获得视图的高度时遇到了一些困难。目前,在应用程序冷启动时,getMeasuredHeight()视图返回0.

现在,我知道解决这个问题的方法。发生这种情况是因为尚未布置视图。不幸的是,使用类似 a 是addOnGlobalLayoutListener不够的。我需要此视图的高度(工具栏 +TabLayout或只是一个工具栏,具体取决于用户的设置)来设置SwipeRefreshLayoutusing的偏移量setProgressCircleOffset()。在应用程序冷启动时,SwipeRefreshLayout显示为“刷新”。每当数据加载或更改时,它都会显示为“刷新”。如果我不知道高度,则SwipeRefreshLayout不会显示它“令人耳目一新”。我不能延迟计算,因为我在冷启动开始时需要它;更不用说它可能是两个可能的高度之一。

所以我的问题是:因为我们可以获得设备的 DPI,并且我通常可以(通过反复试验)估计dp视图的高度(in )(并且它是备用的)——是否可以创建一个“公式" 或者会根据屏幕尺寸调整偏移量的东西?我知道我需要将 转换dppx,但除此之外,我不确定如何去做。

例如,我知道这个视图的高度在我的 Nexus 6 上是 334px(设置为 513dpi);但在我的库存 Pixel C 上肯定更少(Pixel C 上 334px 的偏移量太大了)。

4

1 回答 1

1

所以我最终通过 AMAN77 解决了这个问题。

我得到了设备显示的高度(以像素为单位的总高度),然后将其乘以一个百分比(我通过反复试验得到)作为偏移量。

这是我所做的:

    int screenHeight = getContext().getResources().getDisplayMetrics().heightPixels;
    int headerOffset = Math.round((float) (screenHeight * 0.13));

    //if the user has the "toolbar" setting enabled, we need a different offset
    if (SettingValues.single) {
        headerOffset = Math.round((float) (screenHeight * 0.07));
    }

    mSwipeRefreshLayout.setProgressViewOffset(false,
            headerOffset - Reddit.pxToDp(42, getContext()),
            headerOffset + Reddit.pxToDp(42, getContext()));

像魅力一样工作!

于 2016-03-29T19:41:38.237 回答