Android 当ScrollView中的布局大于ScrollView时,布局权重不起作用

Android 当ScrollView中的布局大于ScrollView时,布局权重不起作用,android,android-layout,android-linearlayout,android-xml,android-scrollview,Android,Android Layout,Android Linearlayout,Android Xml,Android Scrollview,我尝试使用线性布局的布局权重作为滚动视图内部的高度。但是,我发现布局权重仅适用于fillViewPort=true,并且有足够的剩余空间用于线性权重展开 我在下面列出了三个示例,我想使textView在2和3中的大小与xml级别中的1相同。 正如您在链接中看到的,在2、3中,textView被自动更改 以下是我的例子。文本视图和按钮分别包含在线性布局和滚动视图中 1.布局\相对于父级,权重工作正常。工作 2.布局\相对于剩余空间而不是父空间的权重工作。不工作 3忽略布局重量不起作用 这是我的xm

我尝试使用线性布局的布局权重作为滚动视图内部的高度。但是,我发现布局权重仅适用于fillViewPort=true,并且有足够的剩余空间用于线性权重展开

我在下面列出了三个示例,我想使textView在2和3中的大小与xml级别中的1相同。 正如您在链接中看到的,在2、3中,textView被自动更改

以下是我的例子。文本视图和按钮分别包含在线性布局和滚动视图中

1.布局\相对于父级,权重工作正常。工作 2.布局\相对于剩余空间而不是父空间的权重工作。不工作 3忽略布局重量不起作用 这是我的xml代码3。2和1基本上是相同的代码,按钮较少或没有

<?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:id="@+id/scroller"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:weighSum="1"
    android:fillViewport="true" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:weightSum="10" >

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />

        <Button
            android:layout_width="30dip"
            android:layout_height="30dip"
            android:text="Accept" />


        <TextView
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="6"
            android:background="#AAABBB"
            android:text="hello" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="3"
            android:background="#BBBAAA"

            android:text="hello" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="5"
            android:background="#AAABBB"

            android:text="hello" />
    </LinearLayout>

</ScrollView>

尝试在具有布局权重的元素上设置布局高度=0dp。封闭的布局对象将使用任何可用空间尽可能地增加它们


另外,您对weightSum的使用也有点可疑。通常,weightSum应>=封闭视图的总权重。有一个weightSum,其中没有任何直接封闭视图具有权重,另一个weightSum中封闭视图的总权重超过了weightSum。第二种情况将导致奇怪的行为。

尝试在具有布局权重的元素上设置布局高度=0dp。封闭的布局对象将使用任何可用空间尽可能地增加它们


另外,您对weightSum的使用也有点可疑。通常,weightSum应>=封闭视图的总权重。有一个weightSum,其中没有任何直接封闭视图具有权重,另一个weightSum中封闭视图的总权重超过了weightSum。第二种情况将导致奇怪的行为。

这些图像正是我希望看到的xml图像

这可能会帮助您:

当系统使用权重方法在屏幕上放置视图时,它仅根据权重分配备用空间,而不是总空间。因此,要使它根据大多数人直观期望的权重分配总空间,必须将希望它工作的维度设置为0dip。因此,对于这些按钮和文本视图,您需要设置

android:layout_height = "0dip"
您可能还需要强制ScrollView填充视口,以停止一切扭曲。看

个人观察。有时重量似乎起反作用(重量越小,空间越大)。YMMV


这些图像正是我希望看到的xml图像

这可能会帮助您:

当系统使用权重方法在屏幕上放置视图时,它仅根据权重分配备用空间,而不是总空间。因此,要使它根据大多数人直观期望的权重分配总空间,必须将希望它工作的维度设置为0dip。因此,对于这些按钮和文本视图,您需要设置

android:layout_height = "0dip"
您可能还需要强制ScrollView填充视口,以停止一切扭曲。看

个人观察。有时重量似乎起反作用(重量越小,空间越大)。YMMV


砝码按其设计工作。也许不是你想要他们工作的方式,但是说他们不工作是不准确的。考虑一下第三种情况,您希望文本视图的像素大小是多少?权重是可用空间的百分比,而不是父级的总大小。scrollview和linearlayout至少是屏幕的大小,否则是所有子视图的总和。因此,如果您的子视图超过了屏幕的大小(即没有权重的视图),您希望为剩余视图(即具有0dp和权重的视图)分配多少空间?关键是空间的大小是任意的,android不会试图假设你想要多少空间,因为它无法知道


TL;DR-在文本视图上以dp为单位设置最小高度,以处理按钮过多的情况。

权重按设计方式工作。也许不是你想要他们工作的方式,但是说他们不工作是不准确的。考虑一下第三种情况,您希望文本视图的像素大小是多少?权重是可用空间的百分比,而不是父级的总大小。scrollview和linearlayout至少是屏幕的大小,否则是所有子视图的总和。因此,如果您的子视图超过了屏幕的大小(即没有权重的视图),您希望为剩余视图(即具有0dp和权重的视图)分配多少空间?关键是空间的大小是任意的,android不会试图假设你有多少空间 想要,因为它没有可能的方式知道



TL;DR-在文本视图上设置dp中的最小高度,以处理按钮过多的情况。

Working case您可以为这三种情况添加xml吗?这将有助于让你更清楚地知道你在努力完成什么。到底什么对你不起作用?或者你想让其他人完成整个布局?嗨,我只是想让布局工作起来。但我认为布局权重不起作用,这是因为scrollView的性质决定了它可以控制孩子的身高。所以我只想看看我是否错了,场景2和场景3有一个解决方案。谢谢。我认为您正在寻找的解决方法是在加权视图上设置minHeight属性。请看下面我的答案。工作案例您可以为这三种场景添加xml吗?这将有助于让你更清楚地知道你在努力完成什么。到底什么对你不起作用?或者你想让其他人完成整个布局?嗨,我只是想让布局工作起来。但我认为布局权重不起作用,这是因为scrollView的性质决定了它可以控制孩子的身高。所以我只想看看我是否错了,场景2和场景3有一个解决方案。谢谢。我认为您正在寻找的解决方法是在加权视图上设置minHeight属性。见下面我的答案。嗨,谢谢你的回复。我把按钮放在那里,使里面的布局更大,没有其他原因。我只对文本视图与父布局的比例感兴趣。另外,我编辑了代码,我不小心粘贴了错误的代码,但无论如何,案例3都不起作用。我有点困惑。您为布局3显示的图片正是我希望xml提供的内容。你在期待什么?我希望文本视图随着重量和它的父对象而增长。因此,textView 1将增长60%,textView 2将增长30%,textView 3将增长50%的高度。那么,您是否尝试过按照我的建议将textView和按钮的布局高度设置为0倾斜?是的,我尝试过,但不起作用。只要我的LinearLayout不大于scrollView,这种方法就会起作用。您好,谢谢您的回复。我把按钮放在那里,使里面的布局更大,没有其他原因。我只对文本视图与父布局的比例感兴趣。另外,我编辑了代码,我不小心粘贴了错误的代码,但无论如何,案例3都不起作用。我有点困惑。您为布局3显示的图片正是我希望xml提供的内容。你在期待什么?我希望文本视图随着重量和它的父对象而增长。因此,textView 1将增长60%,textView 2将增长30%,textView 3将增长50%的高度。那么,您是否尝试过按照我的建议将textView和按钮的布局高度设置为0倾斜?是的,我尝试过,但不起作用。只要我的LinearLayout不大于scrollView,这种方法就会起作用。您好,谢谢您的回复。我的视图权重之和大于权重之和是因为要测试它是否可以使ScrollView中的虚拟维度变大。但是,布局权重只能使用剩余的可用空间。所以超出的界限将被裁剪。嗨,谢谢你的回复。我的视图权重之和大于权重之和是因为要测试它是否可以使ScrollView中的虚拟维度变大。但是,布局权重只能使用剩余的可用空间。因此,超出的边界将被裁剪。是的,你是对的。我查看了线性布局的源代码,它只适用于剩余空间,任何超出该空间的布局都将设置为wrap_内容。谢谢你的回复。我希望有一种更好的方法来操纵ScrollView中的子布局。是的,你说得对。我查看了线性布局的源代码,它只适用于剩余空间,任何超出该空间的布局都将设置为wrap_内容。谢谢你的回复。我希望有一种更好的方法来操纵ScrollView中的子布局。