android-studio - 为什么我的 Android Layout Design 在我的智能手机上无法正常工作
问题描述
在 Adobe XD 中制作完所有艺术作品后,我在 Android Studio 中设计了一个布局。主要问题是它在我的 Android Studio 预览菜单中看起来很完美,但是一旦我在智能手机甚至虚拟设备上运行我的项目,原始设计就会变形或无法完全显示在屏幕上。为什么会这样?
我已经按照文档所说的那样使用了所有东西。我的意思是,我使用“sp”作为文本。适当的边距和对齐等。
我的 XML 布局代码:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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"
tools:context=".MainActivity"
android:background="@android:color/white">
<ImageView
android:id="@+id/imageView"
android:layout_width="365dp"
android:layout_height="225dp"
android:layout_marginStart="8dp"
android:layout_marginTop="36dp"
android:layout_marginEnd="8dp"
android:src="@drawable/pics"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView3"
android:layout_width="325dp"
android:layout_height="152dp"
android:layout_marginStart="33dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="34dp"
android:fontFamily="@font/ebrima"
android:text="Investigate comedy scenes for clues,
bring the suspects in for questioning
and analyze evidence to catch the
killers. Are you ready to prove your
detective skills?"
android:textColor="#000000"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="34dp"
android:layout_marginTop="28dp"
android:layout_marginEnd="162dp"
android:fontFamily="@font/stencil"
android:text="CARTOON CRATE"
android:textColor="#000000"
android:textSize="25sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.526"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView" />
<Button
android:id="@+id/button"
android:layout_width="108dp"
android:layout_height="43dp"
android:layout_marginStart="8dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/btnshape"
android:text="Let's Go!"
android:textColor="#fff"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.878"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3"
app:layout_constraintVertical_bias="0.153" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="44dp"
android:layout_marginTop="36dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:fontFamily="@font/typo_round"
android:text="Terms and Conditions"
android:textColor="#EBC500"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/button"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView3"
app:layout_constraintVertical_bias="0.106" /></android.support.constraint.ConstraintLayout>
你可以看到
Android Studio Preview 中的实际设计
VS
布局设计在我的智能手机设备上显示的内容。
解决方案
为了帮助您更好地掌握约束布局,我继续并以更好、更少硬编码的方式进行了相同(相似)的布局:
<?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"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="16dp">
<ImageView
android:id="@+id/header_image"
android:layout_width="0dp"
android:layout_height="225dp"
android:background="@android:color/holo_red_dark"
android:contentDescription="@null"
app:layout_constraintBottom_toTopOf="@+id/title_text"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/title_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="cartoon crate"
android:textAllCaps="true"
android:textSize="25sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/header_image" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/body_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/title_text" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/terms_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="Terms and Conditions"
android:textColor="#FFC107"
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@id/go_button"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/body_text" />
<com.google.android.material.button.MaterialButton
android:id="@+id/go_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@android:color/black"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="Let\'s go!"
android:textColor="@android:color/white"
app:layout_constraintBaseline_toBaselineOf="@id/terms_button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/terms_button" />
</androidx.constraintlayout.widget.ConstraintLayout>
当然,这只是一个示例,您需要考虑很多其他事情。请注意,唯一的硬编码值实际上是图像高度(如果我有您的原始图像则不需要,您应该使用 aspectRatio ),然后是填充/边距以使其看起来更好。(无论如何,这些都可能在dimens.xml 中)。
希望这能给你一个更好的主意。
Let's go 和条款和条件链接在水平链中,但您可以使用它的位置;从你的镜头中不清楚,如果按钮应该固定在右边距或哪里。
最后,如果有足够的像素,东西应该适合大多数设备。
推荐阅读
- r - 拆分R中的数据,拆分为百分比
- r - 如何将标签和百分比添加到可打印的 R sunburst
- java - 需要 java OOP 和数组
- javascript - 使用 Intersection Observer API 延迟翻译元素
- python - Guru Meditation Error: Core 1 panic'ed (Double exception) ESP32 using MQTT
- html - 在视口中调整图像
- node.js - 使用 mongoose nodejs 在另一个集合 mongoDB 中填充集合
- docker - 带大使 API 网关的 Go 微服务
- sql - 数据库结构 - 通过外键和求和填充表
- python - 要求用户输入文件以使用 python 运行程序