当前位置: 首页 > 知识库问答 >
问题:

如何在GridLayoutManager中设置项目行的高度

欧阳勇
2023-03-14

我的回收物品在onCreateViewHolder中膨胀

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="16dp">

    <ImageView
        android:id="@+id/gridListImageView"
        android:layout_width="96dp"
        android:layout_height="96dp"
        android:src="@drawable/a" />

    <TextView
        android:id="@+id/gridListView_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>

我想展示这样的东西,其中一排的高度是回收站视图的一半?在空间的其余部分添加填充物?我可以通过GridLayoutManager来完成吗?

这是我的GridLayoutManager

        GridLayoutManager glm = new GridLayoutManager(getActivity(), 2);
        recyclerView.setLayoutManager(glm);

共有3个答案

方弘
2023-03-14

你不需要设置物品的高度。这里的问题是,图像试图填满所有的空间。只需将android:adjustViewBounds=“true”添加到ImageView,它不会添加空格

卢开济
2023-03-14

从支持库25.1.0开始,上面的答案不起作用。我建议进行以下修改:

    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
        GridLayoutManager.LayoutParams lp = (GridLayoutManager.LayoutParams) v.getLayoutParams();
        lp.height = parent.getMeasuredHeight() / 4;
        v.setLayoutParams(lp);
        return new ViewHolder(v);
    }
彭华皓
2023-03-14

adapter中为视图扩展布局时,可以通过编程方式设置它们的高度。为了评估要使用的适当高度,可以依赖父视图组(即RecyclerView本身)。以下是一个示例:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = mLayoutInflater.inflate(R.layout.view_item, parent, false);
    // work here if you need to control height of your items
    // keep in mind that parent is RecyclerView in this case
    int height = parent.getMeasuredHeight() / 4;
    itemView.setMinimumHeight(height);
    return new ItemViewHolder(itemView);        
}

希望这能有所帮助。

 类似资料:
  • 我想使用节标题实现类似网格的布局。想想 https://github.com/TonicArtos/StickyGridHeaders 我现在所做的: 现在常规项目和标题的跨度大小都为1。如何解决这个问题?

  • 我使用GridLayoutManager将项目垂直放置在回收器视图中。每个项目都有一个跨度。现在我希望一些项目结束当前行,所以下一个项目被放置在它下面的新行上。每个项目只能占用一个跨度,所以它们都是相同的宽度。 例子: 第[4]项将放在下一行,而不是第[3]项之后。第[3]项后的空间不得使用。 我试图使用SpanSizeLookup,但它的对我来说没有任何意义,任何值似乎都没有任何作用。 有人能提

  • 为了在命令行上运行TestNG测试,我必须在类路径中设置TestNG。为了做到这一点,我经历了- 无法通过命令行执行TestNG套件文件

  • 我正在使用代号为One的Eclipse插件。 现在我开始第二个项目。 我想设置一个或多个“片段”项目,以避免项目之间的代码重复。例如,如果我有一个用于字符串连接的实用程序类,我希望在一个实用程序片段项目中使用它,然后由我的项目引用。 使用Codename One的推荐方法是什么?

  • 因此,我试图研究一个名为现代UID的示例应用程序emo.exe在这里的zip文件中找到。网站提到应用程序的源代码可以在这里找到。 下载后,将Visual Studio Express 2013 for Windows Desktop指向解决方案文件并尝试在不进行调试的情况下启动,我收到一条错误消息: 具有输出类型类库的项目不能直接启动。 要调试此项目,请将引用库项目的可执行项目添加到此解决方案。将

  • 问题内容: 我正在将Apache POI 3.7与Spring MVC 3.1一起使用。 如何在Apache POI中设置Excel默认行高? 我试着和 但这不起作用。 对这个问题有什么建议吗? 谢谢。 问题答案: 我已经在Apache POI的问题跟踪器上发布了此问题,有人确认这是一个错误。 https://issues.apache.org/bugzilla/show_bug.cgi?id=5