设置元素高度直到视图结束

Posted

技术标签:

【中文标题】设置元素高度直到视图结束【英文标题】:Set element height till end of view 【发布时间】:2021-12-21 15:45:16 【问题描述】:

伙计们,我上面的代码如下所示:

问题是我需要设置硬编码的高度以使其可见。 我想要的是将高度设置到主视图的底部。

这可以使用 height 属性还是我需要使用其他属性? 我当前的实现如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".pkgFragment.LocationAddFragment">

    <RelativeLayout
        android:layout_
        android:layout_>

        <LinearLayout
            android:id="@+id/llLayoutAddLocation"
            android:layout_
            android:layout_
            android:layout_below="@+id/abLayoutAddLocation"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp"
            android:orientation="vertical">

            <GridLayout
                android:layout_
                android:layout_
                android:columnCount="2"
                android:rowCount="1"
                >
            
                <com.google.android.material.switchmaterial.SwitchMaterial
                    android:layout_columnWeight="1"
                    android:layout_
                    android:text="@string/vehicle_name"/>
                <com.google.android.material.switchmaterial.SwitchMaterial
                    android:layout_columnWeight="1"
                    android:layout_
                    android:text="@string/vehicle_name"/>
            </GridLayout>

        </LinearLayout>

        <org.osmdroid.views.MapView
            android:layout_
            android:layout_
            android:layout_below="@id/llLayoutAddLocation"

            >

        </org.osmdroid.views.MapView>
    </RelativeLayout>
</ScrollView>

【问题讨论】:

您不能同时将高度设置为硬编码并使其填充剩余空间。 Match_parent 高度将使其填充剩余部分。为什么你认为它需要硬编码? @GabeSechan 我不希望它被硬编码但 mit matchparent,该视图还涵盖了线性布局,这就是为什么我尝试将其设置为硬编码,这是不好的做法 【参考方案1】:

我 MapView 的高度/宽度不需要硬编码。我自己检查了回购。您可以使用 match_parent 填充整个底部区域。这是来自 repo MapView Sample Layout 的示例。

我建议,不要使用RelativeLayout,而是使用LinearLayout 作为ScrollView 的子(唯一)并将MapView 高度设置为match_parent

您的代码将如下所示:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical"
        android:layout_
        android:layout_>

        <LinearLayout
            android:id="@+id/llLayoutAddLocation"
            android:layout_
            android:layout_
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp"
            android:orientation="vertical">

            <GridLayout
                android:layout_
                android:layout_
                android:columnCount="2"
                android:rowCount="1"
                >
            
                <com.google.android.material.switchmaterial.SwitchMaterial
                    android:layout_columnWeight="1"
                    android:layout_
                    android:text="@string/vehicle_name"/>
                <com.google.android.material.switchmaterial.SwitchMaterial
                    android:layout_columnWeight="1"
                    android:layout_
                    android:text="@string/vehicle_name"/>
            </GridLayout>

        </LinearLayout>

        <org.osmdroid.views.MapView
            android:layout_
            android:layout_
            >

        </org.osmdroid.views.MapView>
    </LinearLayout>

编辑: 我已经编辑了答案。移除滚动视图并将Parent LinearLayout的高度和宽度设置为match_parent。

【讨论】:

我尝试了你的代码,但我的地图没有被填满,直到屏幕结束。 我已经编辑了我的答案。请检查。 它有效。但是我在代码中发现了一个错误:当手机旋转并且我说一个带有打开键盘的文本视图时,键盘消失了。这就是为什么我确实将滚动视图放在第一种情况下。为了在我添加文本视图时保留键盘。但是现在我猜这个解决方案也可以工作:) 很高兴听到它正在工作。

以上是关于设置元素高度直到视图结束的主要内容,如果未能解决你的问题,请参考以下文章

带有桌面站点视图的移动设备上元素的绝对高度和宽度为100%

SwiftUI 中的列表视图占据整个屏幕高度

根据其上方视图“元素”的宽度/高度“动态”生成子视图框架的 x 和 y 值?

父级塌陷清除浮动的五种方法

在ListView中动态更新列表元素高度

在 react-native 中将组件高度设置为 100%