首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android屏幕宽度百分比( RecyclerView项目)

Android屏幕宽度百分比( RecyclerView项目)
EN

Stack Overflow用户
提问于 2018-07-06 08:12:16
回答 8查看 24.4K关注 0票数 45

我如何才能让RecyclerView的项目高度达到屏幕高度的30%?

我不能简单地使用ConstraintLayout或PercentFrameLayout/PercentRelativeLayout,因为它们相对于父布局来定位子布局,它们的大小可能与屏幕不匹配。

我最好使用纯XML (并且不必使用任何Runnables来动态获取屏幕高度)。

编辑

需要澄清的是,由于许多解决方案都建议限制RecyclerView的高度,这并不是我们的目的。RecyclerView应该仍然填充在屏幕上。这就是我所说的,使用屏幕宽度(而不是高度):

这个想法是将卡片的宽度设为屏幕宽度的33%,同时保持回收器视图水平滚动经过屏幕时的宽度不变。

EN

回答 8

Stack Overflow用户

发布于 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

票数 100
EN

Stack Overflow用户

发布于 2018-07-06 10:11:06

据我所知,在XML中无法做到这一点。但是,您可以在Java语言中(没有任何Runnable等)设置ViewHolderitemViewLayoutParams,然后在适配器的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);
}
票数 44
EN

Stack Overflow用户

发布于 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()

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51201482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档