1

我正在尝试使用线性布局的 layout_weight 作为滚动视图内部的高度。但是,我发现 layout_weight 仅适用于 fillViewPort=true 并且如果有足够的剩余空间供 linear_weight 扩展。

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

这是我的例子。TextViews 和 Buttons 包含在 LinearLayout 内,然后是 scrollView 内。

1. Layout_weight 相对于父级工作得很好。(在职的)

http://s22.postimg.org/v0gl2tmyp/Scr​​een_Shot_2013_06_26_at_4_30_51_PM.png

2. Layout_weight 相对于剩余空间而不是父级工作。(不工作)

http://s22.postimg.org/sx65v5n5t/Screen_Shot_2013_06_26_at_4_30_44_PM.png

3 Layout_weight 被忽略(不工作)

http://s22.postimg.org/ibmaj5gu9/Screen_Shot_2013_06_26_at_4_40_32_PM.png

这是我#3的xml代码。#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>
4

3 回答 3

2

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

这可能会帮助您:

  1. 系统在使用权重方式布局View屏幕上的s时,它只根据权重分配空闲空间,而不是空间。因此,要让它根据权重分配总空间(这是大多数人直觉上所期望的),您必须将您希望它工作的维度设置为 0dip。所以,对于那些Buttons 和TextViews 你需要设置

    android:layout_height = "0dip"
    
  2. 您可能还需要强制ScrollView填充视口以停止所有内容。看这里

    android:fillViewport="true"
    
  3. 个人观察。有时权重似乎相反(即较小的权重提供更多空间)。YMMV。

于 2013-06-28T14:49:20.987 回答
2

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

TL;DR - 在您的文本视图上设置一个 minHeight(以 dp 为单位)以处理您有太多按钮的情况。

于 2013-07-08T22:54:21.713 回答
1

尝试在具有 layout_weight 的元素上设置 layout_height="0dp"。封闭的布局对象将使用任何可用空间来尽可能多地增长它们。

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

于 2013-06-28T14:48:35.280 回答