首页 > 解决方案 > Android 应用程序在 Android Studio 模拟器中的外观与在我的手机上不同,如何解决?

问题描述

当应用程序在 Android Studio 模拟器(模拟 Pixel 手机)中运行时,它看起来很好,但是当它在我的手机(三星 A20e)上运行时,它的显示方式就不一样了。我知道三星 A20e 与 Pixel 的纵横比不同,这导致应用程序显示不正确,但我不知道如何解决。这是来自 Pixel 模拟器的屏幕截图。 这是我的 A20e 的屏幕截图,运行相同的应用程序。如您所见,当应用程序在我的手机上运行时,UI 会被压缩。

这是布局中使用的 XML(相同的 XML 在我的手机和模拟器上运行):

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout

    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
            android:text="@string/amount_to_borrow"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/amountBorrowedTextView"
            android:textColor="@color/black"
            android:textStyle="bold"
            android:textSize="18sp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="50dp"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp"
            />

    <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:ems="10"
            android:id="@+id/amountBorrowedEditText"
            app:layout_constraintEnd_toEndOf="parent"
            android:autofillHints=""
            android:layout_marginEnd="32dp"
            app:layout_constraintBaseline_toBaselineOf="@+id/amountBorrowedTextView"
            tools:ignore="LabelFor" />

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/termTextView"
            android:text="@string/term_in_years"
            android:textSize="18sp"
            android:textStyle="bold"
            android:textColor="@color/black"
            app:layout_constraintTop_toBottomOf="@+id/amountBorrowedTextView"
            android:layout_marginTop="50dp"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp" />

    <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:ems="10"
            android:id="@+id/termEditText"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginEnd="32dp"
            app:layout_constraintBaseline_toBaselineOf="@+id/termTextView"
            android:importantForAutofill="no"
            tools:ignore="LabelFor" />

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/interestRateTextView"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/termTextView"
            android:layout_marginTop="50dp"
            android:textSize="18sp"
            android:textColor="@color/black"
            android:textStyle="bold"
            android:text="@string/interest_rate"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp" />

    <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:ems="10"
            android:id="@+id/interestRateEditText"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginEnd="32dp"
            app:layout_constraintBaseline_toBaselineOf="@+id/interestRateTextView"
            android:importantForAutofill="no"
            tools:ignore="LabelFor" />

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/percentageSignTextView"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBaseline_toBaselineOf="@+id/interestRateEditText"
            android:text="@string/percentage_sign"
            android:textSize="20sp"
            android:textColor="@color/black"
            android:textStyle="bold"
            android:layout_marginEnd="10dp" />

    <androidx.appcompat.widget.SwitchCompat
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/interestOnlySwitch"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginEnd="32dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            android:textSize="18sp"
            android:textColor="@color/black"
            android:textStyle="bold"
            android:text="@string/interest_only" />

    <androidx.appcompat.widget.SwitchCompat
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginEnd="32dp"
            app:layout_constraintBottom_toBottomOf="parent"
            android:textSize="18sp"
            android:textStyle="bold"
            android:textColor="@color/black"
            android:id="@+id/singlePeriodOnlySwitch"
            android:text="@string/single_period_only"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="100dp" />

    <Button
            android:text="@string/calculate"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/calculateButton"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="500dp"
            android:layout_marginStart="25dp"
            android:layout_marginEnd="25dp"
            android:textSize="18sp"
            android:textColor="@color/white"
            android:textStyle="bold"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintVertical_bias="0.5" />

    <TextView
            android:text="@string/monthly_payment"
            android:layout_width="143dp"
            android:layout_height="35dp"
            android:id="@+id/monthlyPaymentCaptionTextView"
            app:layout_constraintBottom_toBottomOf="parent"
            android:textSize="18sp"
            android:textColor="@color/black"
            android:textStyle="bold"
            app:layout_constraintTop_toBottomOf="@+id/interestRateTextView"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp"
            app:layout_constraintVertical_bias="0.50" />

    <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:id="@+id/monthlyPaymentEditText"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginEnd="32dp"
            android:autofillHints=""
            tools:ignore="LabelFor"
            android:textSize="18sp"
            android:textStyle="bold"
            android:textColor="@color/black"
            android:inputType="none"
            android:textIsSelectable="true"
            app:layout_constraintBaseline_toBaselineOf="@+id/monthlyPaymentCaptionTextView" />

</androidx.constraintlayout.widget.ConstraintLayout>

我需要知道的是如何创建适用于不同屏幕纵横比的布局,或者至少简化制作这样的布局。提前致谢。

标签: android

解决方案


您应该基于彼此约束您的项目。例如,第一个 textview 和 edittext 看起来像这样

<TextView
            android:text="@string/amount_to_borrow"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/amountBorrowedTextView"
            android:textColor="@color/black"
            android:textStyle="bold"
            android:textSize="18sp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="50dp"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp"
            />

    <EditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:inputType="numberDecimal"
            android:id="@+id/amountBorrowedEditText"
            app:layout_constraintEnd_toEndOf="parent"
            android:autofillHints=""
            android:layout_marginEnd="32dp"
            app:layout_constraintStart_toEndOf="@+id/amountBorrowedTextView"
            app:layout_constraintBaseline_toBaselineOf="@+id/amountBorrowedTextView"
            tools:ignore="LabelFor" />

这将确保编辑文本始终位于 textview 的右侧并填充剩余空间的其余部分


推荐阅读