Recycler查看密度像素中的项目间距

时间:2015-09-02 11:30:18

标签: android

我注意到我的项目装饰存在问题,因为回收者视图会在每个项目之间创建一个空格。

我注意到较小的设备(低分辨率),空间大于较大的设备(较高分辨率)

这是我的代码

public class SpaceBetweenListItems extends RecyclerView.ItemDecoration {

    private int mSpacing;

    public SpaceBetweenListItems(int spacing){
        this.mSpacing = DisplayMetricsUtils.convertPixelsToDp(spacing);
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        int currentPosition = parent.getChildLayoutPosition(view);
        int lastPosition = state.getItemCount()-1;
        outRect.bottom = mSpacing;
        if(currentPosition == lastPosition){
            outRect.bottom = 0;
        }
    }
}

所以我基本上将像素转换为dp。上面的逻辑只是将底部间距应用于除最后一个之外的所有项目。

这是将像素转换为dp

的代码
 public static int convertPixelsToDp(float px){
        DisplayMetrics displayMetrics = MyApplication.getInstance().getResources().getDisplayMetrics();
        return Math.round(px / (displayMetrics.densityDpi / 160.F));
    }

那有什么不对?

1 个答案:

答案 0 :(得分:1)

我认为你应该将dp转换为像素,而不是其他。

int spacing; // should be in dp

只有在这种情况下,您才能获得不同屏幕(不同密度的屏幕)的相同物理尺寸。