android - 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>
我需要知道的是如何创建适用于不同屏幕纵横比的布局,或者至少简化制作这样的布局。提前致谢。
解决方案
您应该基于彼此约束您的项目。例如,第一个 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 的右侧并填充剩余空间的其余部分
推荐阅读
- google-cloud-platform - 数据流,使用客户提供的加密密钥加载文件
- firebase - CocoaPods 无法安装 Google/SignIn 4.1.2 和 Firebase 4.6.0
- javascript - 尽管设置为显示块,但引导模式未显示
- windows - PritUnl VPN:无法与帮助服务通信,尝试重启,windows
- python - Python defaultdict:打开/关闭默认创建?
- html - 如何从 Photoshop 中导出 SVG 文件以便进行编辑?
- python - pandas DataFrame.join 的运行时间(大“O”顺序)是多少?
- libgdx - IOS-MOE Proguard w 依赖项
- python - Python 不会像我想要的那样使用 try / except 语句自动重新连接到 db
- c++ - 从 NSNotification 中删除 C++ 观察者?