每当我在模拟器中打开它时,我的布局都会变得混乱(它是带有文本视图的背景图像)

My layout gets messy whenever I open it in the emulator (It's a background image with textviews)

对于我的项目,我使用背景图片,所以我可以放置不可见的按钮.. 但问题是当我在模拟器中打开 activity 时,它只是一个沙拉(文本视图与按钮等混合在一起。)

<EditText
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:id="@+id/firstname"
    android:inputType="text"
    android:layout_marginTop="57dp"
    android:layout_alignParentTop="true"
    android:layout_alignLeft="@+id/lastname"
    android:layout_alignStart="@+id/lastname" />

<EditText
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:id="@+id/lastname"
    android:inputType="text"
    android:layout_below="@+id/firstname"
    android:layout_alignRight="@+id/spinner"
    android:layout_alignEnd="@+id/spinner" />

<EditText
    android:layout_width="230dp"
    android:layout_height="wrap_content"
    android:id="@+id/email"
    android:inputType="text"
    android:layout_below="@+id/lastname"
    android:layout_alignRight="@+id/lastname"
    android:layout_alignEnd="@+id/lastname" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:ems="10"
    android:id="@+id/password"
    android:layout_marginTop="35dp"
    android:layout_below="@+id/email"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:ems="10"
    android:id="@+id/confirmPasswordEditText"
    android:layout_marginTop="35dp"
    android:layout_below="@+id/password"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<EditText
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:ems="10"
    android:id="@+id/age"
    android:layout_alignBottom="@+id/spinner"
    android:layout_toLeftOf="@+id/imageViewUser"
    android:layout_toStartOf="@+id/imageViewUser" />

<Spinner
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:id="@+id/spinner"
    android:entries="@array/choose"
    android:prompt="@string/genders"
    android:layout_below="@+id/confirmPasswordEditText"
    android:layout_toRightOf="@+id/confirmPasswordEditText"
    android:layout_toEndOf="@+id/confirmPasswordEditText" />

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/joinus"
    android:id="@+id/signUpButton"

    android:layout_alignParentBottom="true"
    android:layout_alignRight="@+id/spinner"
    android:layout_alignEnd="@+id/spinner" />

<ImageView
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:id="@+id/imageViewUser"
    android:layout_below="@+id/age"
    android:layout_alignLeft="@+id/email"
    android:layout_alignStart="@+id/email" />

好的,据我所知,您使用的布局 ID 不正确。

例如,您有:

<EditText
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:ems="10"
    android:id="@+id/age"
    android:layout_alignBottom="@+id/spinner"
    android:layout_toLeftOf="@+id/imageViewUser"
    android:layout_toStartOf="@+id/imageViewUser" />

表示

的行
android:layout_alignbottom="@+id/spinner"

应替换为

android:layout_alignbottom="@id/spinner"

没有“+”符号。

那样的话,您是在引用另一个布局而不是定义一个 id 值。

编辑 这是避免 xml 错误的视图示例:

<!-- This is the top-left-most layout in the view -->
<EditText
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:id="@+id/age" />

<!-- This layout will be shown BELOW the 'age' layout -->
<EditText
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:id="@+id/name"
    android:layout_below="@id/age" />

<!-- This layout will be shown TO THE RIGHT OF the 'age' layout -->
<EditText
    android:layout_width="50dp"
    android:layout_height="wrap_content"
    android:id="@+id/birthday"
    android:layout_toRightOf="@id/age" />

现在,如果您尝试在 @id/age EditText 视图中引用 @id/birthday,则会出现错误,因为布局还不知道 @id/birthday。它的定义如下 @id/age

这有意义吗?

@Yasmin12,您好,我能理解这里发生了什么,您的布局 "dp" 导致了问题。请改用 "dip" 它们会帮助您调试布局,因为它们会尝试在多种屏幕分辨率下保持一致的尺寸,

               <ImageView
                android:id="@+id/avtar_animation_11"
                android:layout_width="45dip"
                android:layout_height="45dip"
                android:src="@drawable/avtar011"/>

当您为尺寸提供 "dp" 时支持多屏幕,实际上 android 希望您为不同的屏幕分辨率提供不同的值。让我们说下面是您的 imagview 尺寸,在您的 android 项目的 res 文件夹中创建几个文件夹,如下所示

values-hdpi, values-mdpi, values-ldpi, values-xhdpi, values-xxhdpi

并在其中每个制作一个 dimens.xml 文件并写入

<dimen name="image_view_width">28dp</dimen>
<dimen name="image_view_height">28dp</dimen>

现在我在这里提到了 "dp" 而不是 dip android 希望我跟踪不同屏幕分辨率的不同尺寸,所以我将更改 image_view_width 和 image_view_height 值位于 dimens.xml 所在的单独值文件夹中。确保您的 dp 值根据您希望视图适合的屏幕分辨率而变化。

            <ImageView
            android:id="@+id/avtar_animation_11"
            android:layout_width="@dimen/image_view_width"
            android:layout_height="@dimen/image_view_height"
            android:src="@drawable/avtar011"/>

困难的部分现在已经结束 android 将根据您的应用所在的屏幕选择 dimens.xml 值之一 运行,瞧,现在您的布局很棒