我有一个水平RecyclerView
的子元素,我想将其宽度更改为比通过布局设置的当前match_parent
小一些。我要这样做,以便列表中的下一个元素在屏幕上有点可见。
在适配器onCreateViewHolder
中,我正在这样做:
ViewGroup.LayoutParams params = view.getLayoutParams();
params.width = MainActivity.deviceWidth - (int) MainActivity.dpToPx(40.0f);
view.setLayoutParams(params);
其中MainActivity.deviceWidth
是:
DisplayMetrics displaymetrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
deviceWidth = displaymetrics.widthPixels;
screenDensity = Resources.getSystem().getDisplayMetrics().density;
和dpToPx
是此功能:
public static float dpToPx(float dp) {
return (dp * screenDensity + 0.5f);
}
这有效。但是,我注意到在不同的设备上,我设置的“保证金”并不总是相同的。即RecyclerView中的下一张卡片并不总是显示相同的金额。
dpToPx
转换正确吗?我可能在计算中遗漏了其他内容,但不确定。
更改:
params.width = MainActivity.deviceWidth - (int) MainActivity.dpToPx(40.0f);
收件人:
params.width = (int) (MainActivity.deviceWidth *0.9);
有效!我对这个解决方案很好。我只想知道为什么上一个不起作用...