我如何才能让RecyclerView的项目高度达到屏幕高度的30%?
我不能简单地使用ConstraintLayout或PercentFrameLayout/PercentRelativeLayout,因为它们相对于父布局来定位子布局,它们的大小可能与屏幕不匹配。
我最好使用纯XML (并且不必使用任何Runnables来动态获取屏幕高度)。
编辑
需要澄清的是,由于许多解决方案都建议限制RecyclerView的高度,这并不是我们的目的。RecyclerView应该仍然填充在屏幕上。这就是我所说的,使用屏幕宽度(而不是高度):
这个想法是将卡片的宽度设为屏幕宽度的33%,同时保持回收器视图水平滚动经过屏幕时的宽度不变。
发布于 2018-07-08 00:16:23
您可以覆盖RecyclerView
使用的LayoutManager
方法之一,以强制指定大小:
recyclerView.setLayoutManager(new LinearLayoutManager(this){
@Override
public boolean checkLayoutParams(RecyclerView.LayoutParams lp) {
// force height of viewHolder here, this will override layout_height from xml
lp.height = getHeight() / 3;
return true;
}
});
这是假设你的RecyclerView
适合屏幕。
如果您想要更复杂的解决方案(带每项控制的自定义布局管理器&直接来自于XML的百分比膨胀),请参阅this answer。
发布于 2018-07-06 10:11:06
据我所知,在XML中无法做到这一点。但是,您可以在Java语言中(没有任何Runnable
等)设置ViewHolder
的itemView
的LayoutParams
,然后在适配器的onCreateViewHolder()
方法中返回ViewHolder
:
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View itemView = inflater.inflate(R.layout.itemview, parent, false);
ViewGroup.LayoutParams layoutParams = itemView.getLayoutParams();
layoutParams.height = (int) (parent.getHeight() * 0.3);
itemView.setLayoutParams(layoutParams);
return new MyViewHolder(itemView);
}
发布于 2018-07-16 18:24:16
您可以使用显示度量
在构造函数中定义显示矩阵,或使用任何其他静态方法初始化。
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
现在您可以在onCreateViewHolder()中使用它了
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
//setting the height programmatically
itemView.getLayoutParams().height = metrics.heightPixels/3;
itemView.requestLayout();
或者您可以在布局的父布局上使用onBindViewHolder()。
https://stackoverflow.com/questions/51201482
复制相似问题