1

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

我最近在一个安卓应用上重做了整个 UI。在大多数情况下,我只对每个屏幕进行了外观更改。它们按预期完美地出现在 Eclipse 的 UI 编辑器中。但是,在执行此操作后,所有测试设备和模拟器上的两个屏幕都停止正确布局。

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

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

<?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,除了其中两个之外,所有这些都在工作。)

起初,我怀疑我们的自定义类度量可能会破坏一些东西,所以我将布局更改为使用所有普通的 EditText,但没有任何变化。我仔细检查了活动,但除了加载此 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 上的某个人有一个想法。这让我把头发拉了出来!

4

2 回答 2

1

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

到目前为止,从这里给出的代码片段来看,这里没有错

于 2013-01-11T19:29:28.790 回答
1

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

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

于 2013-09-17T18:45:34.717 回答