我注意到我的项目装饰存在问题,因为回收者视图会在每个项目之间创建一个空格。
我注意到较小的设备(低分辨率),空间大于较大的设备(较高分辨率)
这是我的代码
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));
}
那有什么不对?
答案 0 :(得分:1)
我认为你应该将dp转换为像素,而不是其他。
int spacing; // should be in dp
只有在这种情况下,您才能获得不同屏幕(不同密度的屏幕)的相同物理尺寸。