Android 设置CardView';s高度作为屏幕大小的自定义百分比

Android 设置CardView';s高度作为屏幕大小的自定义百分比,android,android-layout,android-recyclerview,android-cardview,android-layout-weight,Android,Android Layout,Android Recyclerview,Android Cardview,Android Layout Weight,我有一个片段显示了一个RecyclerView,其中填充了一个对象数组-每个对象1个CardView。我希望我的应用程序显示5个CardView,并在屏幕上显示第6个CardView,无论大小(通过将每个CardView的高度设置为整个屏幕高度的18%)。我目前有这个代码,使每个CardView的高度设置为整个屏幕的1/6。这种方法的问题是,我只能将每个CardView的高度设置为整个屏幕的1/x,其中x只能是整数(我希望能够将每个CardView的高度设置为屏幕高度的自定义百分比,而不是仅设置

我有一个片段显示了一个RecyclerView,其中填充了一个对象数组-每个对象1个CardView。我希望我的应用程序显示5个CardView,并在屏幕上显示第6个CardView,无论大小(通过将每个CardView的高度设置为整个屏幕高度的18%)。我目前有这个代码,使每个CardView的高度设置为整个屏幕的1/6。这种方法的问题是,我只能将每个CardView的高度设置为整个屏幕的1/x,其中x只能是整数(我希望能够将每个CardView的高度设置为屏幕高度的自定义百分比,而不是仅设置为屏幕大小的1/3、1/4、1/5等)

DisplayMetrics DisplayMetrics=新的DisplayMetrics();
WindowManager wm=(WindowManager)context.getSystemService(context.WINDOW\u服务);
Log.i(标记“WM”+WM);
点大小=新点();
Display Display=wm.getDefaultDisplay();
display.getSize(size);
int heighty=size.y;
内部高度=高度/6;//无法使用double,因为setLayoutParams必须为(int)
Log.i(标签,“高度”+高度+“”+显示);
CardView cm=(CardView)view.findViewById(R.id.card);
日志i(标签“cm”+cm);
ViewGroup.LayoutParams params=cm.getLayoutParams();
Log.i(标签“params params”+params);
参数高度=高度;
参数宽度=匹配父项;
cm.setLayoutParams(参数);
这是显示的每个CardView的xml文件


我尝试更改此实现以在ConstraintLayout中使用LinearLayout,其中LinearLayout的高度是整个屏幕的18%,而LinearLayout实例(ImageView和2个textView)的高度是LinearLayout的百分比。用于该实现的我的xml:


这使RecyclerView的每个实例都达到了我想要的高度(屏幕高度的18%),但我的RecyclerView将每个实例指定给一个屏幕,而不是使实例显示在另一个屏幕的正下方(我知道这是因为ConstraintLayout的高度是match_parent,但wrap_内容会使内容消失)。我想知道是否有一种理想的方法来完成我试图做的事情,或者能够解决上述问题

我的RecyclerView xml:



非常感谢您提供的任何帮助。

我已经找到了解决方案。对于有此问题并希望得到答案的人,我修改了上面的Java代码,使每个cardView的高度都不超过屏幕高度的一小部分

DisplayMetrics DisplayMetrics=新的DisplayMetrics();
WindowManager wm=(WindowManager)context.getSystemService(context.WINDOW\u服务);
Log.i(标记“WM”+WM);
点大小=新点();
Display Display=wm.getDefaultDisplay();
display.getSize(size);
int heighty=size.y;
double heightDouble=heighty/2.5;//这将使屏幕显示2个cardview,并使第三个cardview的一半偷看。将2.5替换为您希望使最后一个cardview偷看一定数量的小数点
int height=(int)Math.rint(heightDouble);
Log.i(标签,“高度”+高度+“”+显示);
CardView cm=(CardView)view.findViewById(R.id.card);
日志i(标签“cm”+cm);
ViewGroup.LayoutParams params=cm.getLayoutParams();
Log.i(标签“params params”+params);
参数高度=高度;
参数宽度=匹配父项;
cm.setLayoutParams(参数);