经过对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上的某个人有一个想法。这让我把头发拉了出来!
答案 0 :(得分:1)
尝试为根布局设置固定的宽度和高度。 然后只有你能够调试谁的长度和宽度。父活动或后台活动很可能正在设置维度。确定根本原因后,您可以返回原始设置。
截至目前,您在此处提供的代码段中没有任何错误
答案 1 :(得分:1)
如果您出于某种原因使用自定义活动作为其他活动的容器(在我们的示例中,我们正在重新创建iOS应用程序的外观,并且需要在屏幕的按钮侧显示自定义菜单)窗口管理器似乎与嵌套活动的实际高度和宽度有点混淆。对fillparent或matchparent的调用最终会包含内容。
我们最终改变了容器活动类中几个方法的行为,以使其工作。