LinearLayout中的fill_parent不受尊重

时间:2013-01-11 19:20:57

标签: android android-layout

经过对SO和谷歌的大量研究,我没有看到任何一个我遇到的问题完全相同,所以这里是:

我最近在Android应用上重写了整个用户界面。在大多数情况下,我只对每个屏幕进行了外观修改。它们像预期的那样完美地出现在eclipse的UI编辑器中。但是,在执行此操作后,两个屏幕都停止在所有测试设备和仿真器上正确布局。

现在,这两个屏幕的一个大问题是,根级别LinearLayout似乎并没有真正尊重layout_height或layout_width的fill_parent。它看起来像是被设置为wrap_content而被测量。它只占屏幕的70%左右 - 这足以将单个元素包装在根LinearLayout中。我会发布一张图片,但作为新用户,我不被允许。

布局没有拉伸以填满屏幕。这是布局的代码,除了在包含TextView和EditText的LinearLayouts中还有一些。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FF000000"
    android:orientation="vertical" >

<TextView
    style="@style/sans.white.16.bold"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:paddingTop="4dp"
    android:text="@string/edit_account" />

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

<com.teamunify.ondeck.widget.TUTextView
    style="@style/sans.white.14"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:text="@string/first_name" />

<com.teamunify.ondeck.widget.TUEditText
    android:id="@+id/acc_editor_first"
    android:layout_width="fill_parent"
    android:layout_height="40dp"
    android:selectAllOnFocus="true"
    android:singleLine="true" />
</LinearLayout>

我认为根LinearLayout应该填充高度和宽度。我在我们的应用程序中使用了相同的布局很多次没有问题。 (快速计算显示我在我们的应用程序中使用了76个LinearLayouts,其中除了两个之外的其他所有工作都正常。)

起初,我怀疑也许我们的自定义类测量是破坏事情,所以我改变了布局以使用所有普通的EditTexts,但没有变化。我仔细检查了活动,但除了加载这个xml之外它没有做任何事情。所以,在绝望中,我像这样重新布局:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#FF000000"
        android:orientation="vertical" >

    <TextView
        style="@style/sans.white.16.bold"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center|top"
        android:paddingTop="4dp"
        android:text="@string/edit_account" />

    </LinearLayout>

之后,“编辑帐户”字样显示为左上角的黑色背景。显然,LinearLayout没有填充父级。

长话短说,我问如何解决这个问题,以便LinearLayout按预期填充屏幕。

我完全不知道为什么会这样,我当然希望SO上的某个人有一个想法。这让我把头发拉了出来!

2 个答案:

答案 0 :(得分:1)

尝试为根布局设置固定的宽度和高度。 然后只有你能够调试谁的长度和宽度。父活动或后台活动很可能正在设置维度。确定根本原因后,您可以返回原始设置。

截至目前,您在此处提供的代码段中没有任何错误

答案 1 :(得分:1)

如果您出于某种原因使用自定义活动作为其他活动的容器(在我们的示例中,我们正在重新创建iOS应用程序的外观,并且需要在屏幕的按钮侧显示自定义菜单)窗口管理器似乎与嵌套活动的实际高度和宽度有点混淆。对fillparent或matchparent的调用最终会包含内容。

我们最终改变了容器活动类中几个方法的行为,以使其工作。