RecyclerView 与 CardView 作为仪表板或像 Windows Tiles

Posted

技术标签:

【中文标题】RecyclerView 与 CardView 作为仪表板或像 Windows Tiles【英文标题】:RecyclerView with CardView as Dashboard or like a Windows Tiles 【发布时间】:2017-12-01 14:01:15 【问题描述】:

我花了很多时间寻找解决方案 How to do Windows tile like interface,也称为 Dashboard。我想用它 RecyclerView 和 CardView。我找到了旧的解决方案,但使用了带有按钮的 LinearLayout:How to create layout with 6 buttons like windows tiles

我现在拥有的:

我想要什么:

我有六个 CardView,它们应该占据父级 RelativeLayout 的整个区域,并且无论屏幕宽度如何,它们的大小都是一样的。

在纵向模式下,我有 2 列,在横向模式下 - 3 列。

 recyclerView.setHasFixedSize(true);
        int columns = resources.getConfiguration()
                .orientation == Configuration.ORIENTATION_LANDSCAPE ? 3 : 2;

        RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getApplicationContext(), columns);
        recyclerView.addItemDecoration(new GridSpacingItemDecoration(columns,
                Utils.dpToPx(resources, 3), true));
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setLayoutManager(mLayoutManager);

我该怎么做?

【问题讨论】:

【参考方案1】:

与往常一样,在我在这里写下一个问题后,过一会儿解决方案就会自行出现。这是我解决这个问题的方法

在您的 RecyclerView 适配器中:

@Override
public HomeTilesAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.home_tile_item, parent, false);
    int h = parent.getHeight();
    // margin - activity_vertical_margin
    // rows - number of rows in diffrent display modes
    h = (h - Math.round(margin*2))/rows;

    RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) itemView.getLayoutParams();
    params.height = h;
    itemView.setLayoutParams(params);

    return new MyViewHolder(itemView);

这个决定解决了问题,但在这个过程中我遇到了另一个问题。在平板电脑上,图标看起来很小,看起来并不漂亮。我是如何解决这个问题的,你可以阅读这篇文章:ImageView size for phones and tablets

结果

【讨论】:

我不明白如何获取保证金

以上是关于RecyclerView 与 CardView 作为仪表板或像 Windows Tiles的主要内容,如果未能解决你的问题,请参考以下文章

共享元素返回过渡不适用于片段中的 recyclerview 和 cardview

RecyclerView 结合 CardView 使用

从 RecyclerView 单击 CardView 加载片段

如何使 Recyclerview 和 Cardview 透明

为啥 CardView 和 RecyclerView 需要 minSdkVersion L?

翻译Android RecyclerView CardView