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

将垂直循环视图项目视图设置为height=match_parent与设备的高度不匹配

穆俊哲
2023-03-14

我正在尝试将recyclerview上第一个视图的高度设置为match_parent。也就是说,第一个视图应该覆盖整个设备。下面是第一个视图的XML,注意高度和宽度设置为match_parent

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:contentPadding="14dp">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="10dp"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/main_icon"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:text="IC"
            android:textSize="100sp" />

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:id="@+id/temp"
                android:layout_height="match_parent"
                android:layout_width="match_parent"
                android:gravity="center"
                android:text="12°"
                android:textColor="@color/normal_text"
                android:textSize="86dp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/description"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="LIGHT SNOW"
                android:textColor="@color/light_text"
                android:textSize="14dp" />


        </LinearLayout>


    </LinearLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingLeft="20dp"

        android:paddingRight="20dp"
        android:paddingTop="20dp">

        <com.feresr.rxweather.UI.views.InfoDisplay
            android:id="@+id/humidity"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:ic="&#xf07a;"
            app:sub="Humid." />

        <com.feresr.rxweather.UI.views.InfoDisplay
            android:id="@+id/tempMax"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:ic="&#xf050;"
            app:sub="East" />

        <com.feresr.rxweather.UI.views.InfoDisplay
            android:id="@+id/tempMin"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:ic="&#xf079;"
            app:sub="Press." />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="20dp">

        <com.feresr.rxweather.UI.views.InfoDisplay
            android:id="@+id/clouds"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:ic="&#xf013;"
            app:sub="Cluds" />

        <com.feresr.rxweather.UI.views.InfoDisplay
            android:id="@+id/precipitation"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:ic="&#xf084;"
            app:sub="0.29 mm" />

        <com.feresr.rxweather.UI.views.InfoDisplay
            android:id="@+id/feels_like"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:ic="&#xf055;"
            app:sub="Feels like " />
    </LinearLayout>
</LinearLayout>

出于某种原因,当在我的设备上运行它时,我将视图视为包装内容。任何形式的帮助都将不胜感激。

共有3个答案

怀洛华
2023-03-14

XML布局中的< code>match_parent是否有效取决于它的膨胀方式。因此,我们的列表项视图应该按如下方式展开,以使视图固定器中的< code > Android:layout _ height = " match _ parent " 工作:

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.viewholder, recyclerView, false);

关于上面的代码需要注意的几件重要事情是:

> < Li > < p > < code > layoutinflater . inflate(resource,root,attachToRoot)是用于展开列表项目视图的方法。

对回收器视图的引用作为< code>root参数传递给了< code>inflate方法。这很重要,因为当膨胀XML的根节点遇到< code>match_parent时,它将匹配< code > root < code > View 的维度。

false 被传递到附加到到附加到根参数的膨胀方法中。这很重要,因为我们实际上不希望充气机将充气视图附加到部......回收器视图将负责将视图附加到自身。

另一个堆栈溢出答案非常相关。

鱼安然
2023-03-14

你是对的,垂直回收器没有高度是匹配父级,如果你使用窗口管理器Point.size。我将解释您的答案如何在此图像中工作:

要解决这个问题,您可以在Activity的< code>onCreate中像这样使用< code>ViewTreeObserver:

ViewTreeObserver vto = recyclerViewItems.getViewTreeObserver();
    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            recyclerViewItems.getViewTreeObserver().removeOnPreDrawListener(this);
            //get height of RecyclerView's Match Parent
            finalHeight = recyclerViewItems.getMeasuredHeight();           

            LinearLayoutManager itemsLayoutManager = new LinearLayoutManager(getApplicationContext());
            itemsLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
            recyclerViewItems.setLayoutManager(itemsLayoutManager);
            VerticalAdapter verticalAdapter = new VerticalAdapter(DataList<>());
            recyclerViewItems.setAdapter(verticalAdapter);
            return true;
        }
    });
郎成弘
2023-03-14

我最终在运行时计算高度,并将其动态设置为我的视图。

            WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            Display display = wm.getDefaultDisplay();
            Point size = new Point();
            display.getSize(size);
            int height = size.y;
            currentlyViewHolder.view.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, height));

如果有人知道如何在XML上实现这一点,我可以更改公认的答案。

 类似资料:
  • 所以我在垂直ScrollView中有一个水平回收器视图。我的布局中的所有内容都显示得很好,并且都按照我想要的方向滚动,并且它做得很好。 我唯一的问题是,RecyclerView位于ScrollView中其他内容的下方,当RecyclerViewer部分可见时,它会在启动时将RecyclerView的底部与屏幕的底部对齐。这意味着RecyclerView上方的内容被推离屏幕。 有谁知道为什么会发生这

  • 7.3.1 视图配置 可配置当前视图的名称,填写备注,及设定要排除的网址查询参数。 关于排除网址查询参数 对于每个视图,在受访页面中,系统将合并此处配置的排除网址查询参数,而不体现在受访页面的后缀参数中。 其中,系统默认排除的网址参数包括 秒针规范,谷歌规范,及系统默认的自定义广告参数规范。具体字段为: mz_ca,mz_sp,mz_sb,mz_kw, utm_content,utm_term,u

  • 我在UIViewController的视图中有一个。我想要的是将它的高度设置为视图的三分之一,无论屏幕大小如何。我当然知道如何从代码中做到这一点。但是,如何仅使用情节提要/界面构建器来实现这一点呢?

  • 我见过很多关于如何分别设置ImageView和GridView的高度和宽度的问题。这里,这里,还有这里 但是,我想知道如何设置两者。 这是我的设置。在我的GridView中,我有一个ImageView和一个TextView。我有一些不同宽度和大小的图像,我想调整它们的大小,使其始终是屏幕正方形大小的1/3。下面,我有一段文字描述。 这是我到目前为止的代码。。。 gallerygridview.xm

  • 我在表视图单元格下有一个集合视图。我在集合视图中显示所有标记值。现在,我想使表视图的高度动态变化,以便显示所有数据。用户不需要滚动集合视图。我在项目中使用自动布局。目前,我在tableView(_tableView:UITableView,heightForRowAt-indexPath:indexPath)方法中返回“UITableView.automaticDimension”,并使集合视图滚

  • 问题内容: 我在运行时的内存中有一个位图。我想将文本视图的背景设置为此位图。我无法为此找到任何标准程序(不是很麻烦的程序)。如果有人在这方面工作过,请帮忙! 问题答案: 根据API文档,setBackgroundResource需要一个int值。 如果确实需要位图,则可以使用setBackgroundDrawable代替,并将位图包装在BitmapDrawable中。例