与设备相比,我在 android 中的布局预览显示不同

Posted

技术标签:

【中文标题】与设备相比,我在 android 中的布局预览显示不同【英文标题】:My layout preview in android is showing different as compared to device 【发布时间】:2019-07-18 19:59:07 【问题描述】:

请告诉我的代码哪里出错了。或者是某些设置有问题。我已经尝试过约束布局,它仍然显示类似的错误。我还检查了设备分辨率。它与预览匹配,但仍然显示不同。

这是它在预览中的显示方式。

这是它在设备中的显示方式。

<RelativeLayout android:layout_
xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_
android:orientation="vertical"


>

<de.hdodenhof.circleimageview.CircleImageView
    android:id="@+id/pr_image"
    android:layout_
    android:layout_
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_alignParentEnd="true"
    android:layout_marginStart="144dp"
    android:layout_marginTop="21dp"
    android:layout_marginEnd="152dp"
    android:src="@mipmap/ic_launcher_round" />

<TextView
    android:id="@+id/textView"
    android:layout_
    android:layout_
    android:layout_below="@+id/pr_image"
    android:layout_alignParentStart="true"
    android:layout_alignParentEnd="true"
    android:layout_marginStart="124dp"
    android:layout_marginTop="26dp"
    android:layout_marginEnd="125dp"
    android:text="@string/personal_details"
    android:textSize="22sp"
    android:textStyle="bold" />

<EditText
    android:id="@+id/pr_name"
    android:layout_
    android:layout_
    android:layout_below="@+id/textView"
    android:layout_alignParentStart="true"
    android:layout_marginStart="56dp"
    android:layout_marginTop="21dp"
    android:ems="10"
    android:hint="@string/full_name"
    android:inputType="textPersonName"
    android:textSize="16sp" />

<EditText
    android:id="@+id/pr_email"
    android:layout_
    android:layout_
    android:layout_below="@+id/pr_name"
    android:layout_alignParentStart="true"
    android:layout_marginStart="56dp"
    android:layout_marginTop="24dp"
    android:layout_marginEnd="56dp"
    android:ems="10"
    android:hint="@string/email"
    android:inputType="textPersonName"
    android:textSize="16sp" />


<EditText
    android:id="@+id/ed_location"
    android:layout_
    android:layout_
    android:layout_below="@+id/pr_email"
    android:layout_alignParentStart="true"
    android:layout_marginStart="55dp"
    android:layout_marginTop="23dp"
    android:layout_marginEnd="56dp"
    android:ems="10"
    android:hint="@string/location"
    android:inputType="textPersonName"
    android:textSize="16sp" />

<EditText
    android:id="@+id/pd_links"
    android:layout_
    android:layout_
    android:layout_below="@+id/ed_location"
    android:layout_alignParentStart="true"
    android:layout_marginStart="55dp"
    android:layout_marginTop="24dp"
    android:layout_marginEnd="56dp"
    android:ems="10"
    android:hint="@string/links"
    android:inputType="textPersonName"
    android:textSize="16sp" />

<EditText
    android:id="@+id/pd_mobile"
    android:layout_
    android:layout_
    android:layout_below="@+id/pd_links"
    android:layout_alignParentStart="true"
    android:layout_marginStart="56dp"
    android:layout_marginTop="26dp"
    android:layout_marginEnd="56dp"
    android:ems="10"
    android:hint="@string/mobile"
    android:inputType="textPersonName"
    android:textSize="16sp" />

<Button
    android:id="@+id/pd_save"
    android:layout_
    android:layout_
    android:layout_below="@+id/pd_mobile"
    android:layout_alignParentStart="true"
    android:layout_marginStart="155dp"
    android:layout_marginTop="24dp"
    android:layout_marginEnd="152dp"
    android:text="@string/save" />

【问题讨论】:

尝试使用约束布局。比相对布局更好的布局 【参考方案1】:

好的,试试这个编辑过的 xml 文件的代码,你会遇到这个问题,因为手机屏幕尺寸不同,当你手动指定宽度并将其运行到特定手机时,它会根据屏幕尺寸自行调整,这就是你的屏幕的主要原因搞砸了,所以不要手动指定宽度,而是将其设置为 match_parent 并提供左右边距来解决您的问题:

<de.hdodenhof.circleimageview.CircleImageView
    android:id="@+id/pr_image"
    android:layout_
    android:layout_
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_alignParentEnd="true"
    android:layout_marginStart="144dp"
    android:layout_marginTop="21dp"
    android:layout_marginEnd="152dp"
    android:src="@mipmap/ic_launcher_round" />

<TextView
    android:id="@+id/textView"
    android:layout_
    android:layout_
    android:layout_below="@+id/pr_image"
    android:layout_alignParentStart="true"
    android:layout_alignParentEnd="true"
    android:layout_marginStart="124dp"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:layout_marginTop="26dp"
    android:layout_marginEnd="125dp"
    android:text="@string/personal_details"
    android:textSize="22sp"
    android:textStyle="bold" />

<EditText
    android:id="@+id/pr_name"
    android:layout_
    android:layout_
    android:layout_below="@+id/textView"
    android:layout_alignParentStart="true"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:layout_marginStart="56dp"
    android:layout_marginTop="21dp"
    android:ems="10"
    android:hint="@string/full_name"
    android:inputType="textPersonName"
    android:textSize="16sp" />

<EditText
    android:id="@+id/pr_email"
    android:layout_
    android:layout_
    android:layout_below="@+id/pr_name"
    android:layout_alignParentStart="true"
    android:layout_marginStart="56dp"
    android:layout_marginTop="24dp"
    android:layout_marginEnd="56dp"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:ems="10"
    android:hint="@string/email"
    android:inputType="textPersonName"
    android:textSize="16sp" />


<EditText
    android:id="@+id/ed_location"
    android:layout_
    android:layout_
    android:layout_below="@+id/pr_email"
    android:layout_alignParentStart="true"
    android:layout_marginStart="55dp"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:layout_marginTop="23dp"
    android:layout_marginEnd="56dp"
    android:ems="10"
    android:hint="@string/location"
    android:inputType="textPersonName"
    android:textSize="16sp" />

<EditText
    android:id="@+id/pd_links"
    android:layout_
    android:layout_
    android:layout_below="@+id/ed_location"
    android:layout_alignParentStart="true"
    android:layout_marginStart="55dp"
    android:layout_marginTop="24dp"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:layout_marginEnd="56dp"
    android:ems="10"
    android:hint="@string/links"
    android:inputType="textPersonName"
    android:textSize="16sp" />

<EditText
    android:id="@+id/pd_mobile"
    android:layout_
    android:layout_
    android:layout_below="@+id/pd_links"
    android:layout_alignParentStart="true"
    android:layout_marginStart="56dp"
    android:layout_marginTop="26dp"
    android:layout_marginEnd="56dp"
    android:ems="10"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"
    android:hint="@string/mobile"
    android:inputType="textPersonName"
    android:textSize="16sp" />

<Button
    android:id="@+id/pd_save"
    android:layout_
    android:layout_
    android:layout_below="@+id/pd_mobile"
    android:layout_alignParentStart="true"
    android:layout_marginStart="155dp"
    android:layout_marginTop="24dp"
    android:layout_marginEnd="152dp"
    android:text="@string/save" />

【讨论】:

请解释一下你在做什么以便他能理解 如果您已经在使用 MarginLeft/Right 和 marginStart/End 则将它们设置为相同的值。如果左边距等于右边距,则不需要 marginStart/End @isaaaaame 这个答案供他参考 这不是代码编写服务让他自己弄清楚 @Mr. Patel 我尝试了您的代码,但它的显示方式与预览显示的方式不同。 @ShreyAgarwal 删除开始和结束【参考方案2】:

您在视图上使用固定尺寸,并且由于不同的手机具有不同的屏幕尺寸,因此此布局并不能真正响应所有设备,如果您想要完全响应式布局,您最好使用constraint layout。 如果您想使用相对布局,您最好更改您的固定尺寸,但如前所述,约束布局将是您的最佳选择 - 这是一个简单布局的示例,看起来像您希望的那样:强>

    <androidx.constraintlayout.widget.ConstraintLayout
    android:layout_
    android:layout_>


    <ImageView
        android:id="@+id/imageView"
        android:layout_
        android:layout_
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:src="@tools:sample/avatars[5]" />

    <TextView
        android:id="@+id/textView8"
        android:layout_
        android:layout_
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="Personal details"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView" />

    <EditText
        android:id="@+id/editText3"
        android:layout_
        android:layout_
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="Full name"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView8" />

    <EditText
        android:id="@+id/editText"
        android:layout_
        android:layout_
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="Full Email"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText2" />

    <EditText
        android:id="@+id/editText4"
        android:layout_
        android:layout_
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="Location"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText" />

    <EditText
        android:id="@+id/editText5"
        android:layout_
        android:layout_
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="Links"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText4" />

    <EditText
        android:id="@+id/editText6"
        android:layout_
        android:layout_
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="180dp"
        android:text="Mobile"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText5" />

    <EditText
        android:id="@+id/editText2"
        android:layout_
        android:layout_
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="Full name"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView8" />

    <Button
        android:id="@+id/button2"
        android:layout_
        android:layout_
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

【讨论】:

以上是关于与设备相比,我在 android 中的布局预览显示不同的主要内容,如果未能解决你的问题,请参考以下文章

ImageView 不在设备中查看,但在设计预览中显示

Android studio设置与测试机屏幕大小相同的布局预览

Android应用程序中莫名其妙的空白/空白区域,未显示在布局预览中

Android 污迹布局

请教一个关于Android Studio布局预览的问题

为啥 Android Studio 预览版中的 Activity 外观与设备上的不同?