1

当使用 Eclipse 的布局编辑器设计 Android 布局时,编辑一个元素的 ID 或移动它会导致所有其他元素移动。此外,将整个元素包装到另一个容器中也会导致此问题。

在此处输入图像描述

这就是发生的事情。在此之后,将元素移动到正确的位置是绝对不可能的。

如何解决问题?

编辑前的 XML 文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <EditText
        android:id="@+id/securityQuestion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="31dp"
        android:ems="10"
        android:hint="@string/turvak" >

        <requestFocus />

    </EditText>

    <EditText
        android:id="@+id/securityQuestionAnswer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/securityQuestion"
        android:layout_below="@+id/securityQuestion"
        android:layout_marginTop="24dp"
        android:ems="10"
        android:hint="@string/vastaus"
        android:inputType="textPassword" />

    <EditText
        android:id="@+id/password1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/securityQuestion"
        android:layout_below="@+id/securityQuestionAnswer"
        android:layout_marginTop="57dp"
        android:ems="10"
        android:hint="@string/salis"
        android:inputType="textPassword" />

    <EditText
        android:id="@+id/password2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/password1"
        android:layout_alignRight="@+id/password1"
        android:layout_centerVertical="true"
        android:ems="10"
        android:hint="@string/salasanauudelleen"
        android:inputType="textPassword" >
    </EditText>

    <Button
        android:id="@+id/saveButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/password2"
        android:layout_below="@+id/password2"
        android:layout_marginTop="30dp"
        android:text="@string/tallenna" />

</RelativeLayout>

添加容器后,一个ScrollView:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ScrollView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <EditText
            android:id="@+id/securityQuestion"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="31dp"
            android:ems="10"
            android:hint="@string/turvak" >

            <requestFocus />
        </EditText>

        <EditText
            android:id="@+id/securityQuestionAnswer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/securityQuestion"
            android:layout_below="@+id/securityQuestion"
            android:layout_marginTop="24dp"
            android:ems="10"
            android:hint="@string/vastaus"
            android:inputType="textPassword" />

        <EditText
            android:id="@+id/password1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignRight="@+id/securityQuestion"
            android:layout_below="@+id/securityQuestionAnswer"
            android:layout_marginTop="57dp"
            android:ems="10"
            android:hint="@string/salis"
            android:inputType="textPassword" />

        <EditText
            android:id="@+id/password2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/password1"
            android:layout_alignRight="@+id/password1"
            android:layout_centerVertical="true"
            android:ems="10"
            android:hint="@string/salasanauudelleen"
            android:inputType="textPassword" >
        </EditText>

        <Button
            android:id="@+id/saveButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignRight="@+id/password2"
            android:layout_below="@+id/password2"
            android:layout_marginTop="30dp"
            android:text="@string/tallenna" />
    </RelativeLayout>

</ScrollView>
4

1 回答 1

3

我猜你正在使用RelativeLayout。在此布局中,视图定义了它们相对于其他视图的位置。因此,更改一个视图的位置/ID,将重新定位依赖于该视图的所有视图,以及依赖于依赖于已编辑视图的视图的所有视图等。此外,当您将现有视图包装在另一个布局容器中时,其他视图不能再直接引用它们,从而导致相同的行为。

您可以通过以下方式解决(好吧,真的避免):

  1. 转到 XML 并查找/替换要更改的 ID。这将更改对它的所有引用,并确保视图不会尝试将自己定位到现在不存在的 ID
  2. 使用类似 LinearLayout 的布局,其中视图位置不依赖于其他视图(但是,视图大小可能)。

除此之外,没有解决方法,因为这是预期的行为。

于 2012-09-22T12:21:51.703 回答