通过编程将视图的宽度设置为相对于设备屏幕

时间:2019-12-16 09:53:12

标签: java android android-layout android-screen-support

我有一个水平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);

有效!我对这个解决方案很好。我只想知道为什么上一个不起作用...

0 个答案:

没有答案