为什么我的布局在物理设备上会崩溃?

问题描述 投票:0回答:2

我正在学习 Android Studio,参加 Udemy 课程。

课程本身一切都很好,我也相处得很好。唯一的问题是,我的笔记本电脑很弱,比如 8GB 的内存很弱。因此,像视频中的讲师所做的那样运行模拟器对我来说是一个非常漫长的过程。幸运的是,我有 S24 Ultra,所以我可以对其进行测试。

问题是,我制作的所有应用程序在我的手机上显示得比在设计窗口中大得多。我尝试了很多不同的设备选项和模拟器,在我使用实际设备之前它们看起来都很好。

我不明白我做错了什么。我正在使用约束布局并约束所有视图对象。

它应该是这样的:

enter image description here

这是我手机上的样子:

enter image description here

代码:

<?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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/wallpaper"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="72sp"
        android:text="French Teacher"
        android:textColor="@color/white"
        android:textSize="32sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/blackButton"
        android:layout_width="150sp"
        android:layout_height="wrap_content"
        android:layout_marginTop="200sp"
        android:backgroundTint="@color/white"
        android:text="Black"
        android:textColor="@color/black"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView3" />

    <Button
        android:id="@+id/greenButton"
        android:layout_width="150sp"
        android:layout_height="wrap_content"
        android:layout_marginTop="60sp"
        android:backgroundTint="@color/white"
        android:text="Green"
        android:textColor="#45FA02"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/blackButton" />

    <Button
        android:id="@+id/purpleButton"
        android:layout_width="150sp"
        android:layout_height="wrap_content"
        android:layout_marginTop="60sp"
        android:backgroundTint="@color/white"
        android:text="Purple"
        android:textColor="#A61AF3"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/greenButton" />

    <Button
        android:id="@+id/redButton"
        android:layout_width="150sp"
        android:layout_height="wrap_content"
        android:layout_marginTop="60sp"
        android:backgroundTint="@color/white"
        android:text="Red"
        android:textColor="#FB5B11"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/purpleButton" />

    <Button
        android:id="@+id/yellowButton"
        android:layout_width="150sp"
        android:layout_height="wrap_content"
        android:layout_marginTop="60sp"
        android:backgroundTint="@color/white"
        android:text="Yellow"
        android:textColor="#FFF27F"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/redButton" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_begin="1028dp" />

</androidx.constraintlayout.widget.ConstraintLayout>

请帮忙,我正在疯狂地试图解决这个问题,因为这对我来说毫无意义。

请注意:

  1. 我的伴侣也有一台 S24 ultra(同样的东西)
  2. 我们都没有任何字体缩放,当我尝试弄乱字体缩放设备端时,它并没有真正改变)
  3. 两款手机都没有屏幕缩放功能,但看起来这就是发生的事情,因为我失去了一些底部

我已经尝试过 SP 和 DP 的尺寸,没有什么区别

预览不是问题,我知道问题在哪里,并且已经在每种可能的预览设备上进行了尝试。唯一与我的 S24 显示类似的设备是 Pixel 3?这毫无意义,因为它更小且 DPI 更低

java android xml android-layout samsung-mobile
2个回答
0
投票

我已将上面的代码粘贴到我的android studio中,查看输出 (我已将背景更改为蓝色,因为您的背景可用,您可以使用您的背景设置)

enter image description here

现在我已经设置为您想要的输出,如上图所示

代码:

<?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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/blueLight">

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="52dp"
        android:text="French Teacher"
        android:textColor="@color/white"
        android:textSize="32sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/blackButton"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/white"
        android:layout_marginTop="110dp"
        android:text="Black"
        android:textColor="@color/black"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView3" />

    <Button
        android:id="@+id/greenButton"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/white"
        android:layout_marginTop="30dp"
        android:text="Green"
        android:textColor="#45FA02"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/blackButton" />

    <Button
        android:id="@+id/purpleButton"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/white"
        android:layout_marginTop="30dp"
        android:text="Purple"
        android:textColor="#A61AF3"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/greenButton" />

    <Button
        android:id="@+id/redButton"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/white"
        android:layout_marginTop="30dp"
        android:text="Red"
        android:textColor="#FB5B11"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/purpleButton" />

    <Button
        android:id="@+id/yellowButton"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:backgroundTint="@color/white"
        android:layout_marginTop="30dp"
        android:text="Yellow"
        android:textColor="#FFF27F"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/redButton" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_begin="1028dp" />

</androidx.constraintlayout.widget.ConstraintLayout>

我的输出:

enter image description here

在android studio中,有时设计中定义的像素不会在android屏幕中设置,因此您必须在android studio xml设计中手动设置像素。


0
投票

嗯...您使用 sp 作为边距而不是 dp 有什么原因吗?

sp 只能用于文本的字体大小,不能用于布局边距/填充。

© www.soinside.com 2019 - 2024. All rights reserved.