1

Eclipse のレイアウト エディターを使用して Android レイアウトを設計する場合、要素の ID の 1 つを編集または移動すると、他のすべての 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を使用していると思います。このレイアウトでは、ビューは他のビューに対する相対的な位置を定義します。このため、1 つのビューの位置/ID を変更すると、そのビューに依存するすべてのビュー、および編集されたビューに依存するビューに依存するすべてのビューなどが再配置されます。さらに、既存のビューを別のレイアウト コンテナーにラップすると、他のビューはそれらを直接参照できなくなり、同じ動作が発生します。

次の方法でこれを修正できます(まあ、実際には避けてください):

  1. XML に移動し、変更する ID を検索/置換します。これにより、それへのすべての参照が変更され、ビューが存在しない ID に自分自身を配置しようとしないようにします。
  2. View の位置が他のビューに依存しない LinearLayout のようなレイアウトを使用します (ただし、ビューのサイズは異なります)。

これは予期された動作であるため、それ以外に回避策はありません。

于 2012-09-22T12:21:51.703 に答える