如何修复重叠的对象

问题描述 投票:1回答:6

我最近开始了解如何在Android Studio中编码并想要设置基本编码。我创建了2个数字对象和1个按钮,1个纯文本对象。在不编写任何代码的情况下,当我单击Android Studio上的“运行应用程序”按钮并选择任何仿真器时,所有对象都会相互堆叠。有没有一种简单的方法来解决这个问题?

以下是activity_main.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="com.example.myapplication70.MainActivity">

    <EditText
        android:id="@+id/editText3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="Result"
        android:inputType="numberDecimal"
        tools:layout_editor_absoluteX="67dp"
        tools:layout_editor_absoluteY="223dp" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="number"
        tools:layout_editor_absoluteX="67dp"
        tools:layout_editor_absoluteY="60dp" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="numberSigned"
        tools:layout_editor_absoluteX="67dp"
        tools:layout_editor_absoluteY="134dp" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        tools:layout_editor_absoluteX="100dp"
        tools:layout_editor_absoluteY="319dp" />

</android.support.constraint.ConstraintLayout>

Editor Image Emulator Image

android android-layout android-constraintlayout
6个回答
0
投票

您正在使用约束布局作为主布局,这意味着布局中的元素将根据约束放置,请检查Android Documentation是否使用约束布局。


0
投票

正如@RobCo所提到的,tools名称空间属性仅适用于编辑器:

构建应用程序时,构建工具会删除这些属性,因此不会影响APK大小或运行时行为。

在布局编辑器中移动视图时,将自动生成布局文件中的tools:layout_editor_absolute属性,这些属性仅用于在设计布局时作为参考。

相反,您应该利用app:layout_constraint...属性,这些属性也可以在布局编辑器中创建。我建议你看看training documentation来学习如何做到这一点。

否则,正如@nbokmans所提到的,你可能想要考虑一个LinearLayout;这可能会更容易包裹你的头。


0
投票

看到您的布局,您目前缺少约束。对于与实际设备上的编辑器保持在同一位置的对象,COnstraints至关重要。

您可以通过拖放手动添加它们来创建它们,也可以使用“推断约束”自动添加它们


0
投票

在约束布局中,您可以使用蓝色打印调整对象轻松克服重叠。例如。选择一个对象并使用点箭头(拖动时会找到)和左边缘以及右边缘和底边缘拖动到顶边,然后您可以调整对象的位置。


0
投票

删除所有tools:layout_editor_absoluteXtools:layout_editor_absoluteY属性。

根据Documentation

构建应用程序时,构建工具会删除这些属性,因此不会影响APK大小或运行时行为

如果您想根据显示的预览对齐所有属性并使用ConstraintLayout,我建议您了解有关ConstraintLayout以及如何Build a Responsive UI with ConstraintLayout的更多信息

此外,要修复当前布局,您可以进行以下更改:

<?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="com.example.myapplication70.MainActivity">

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="32dp"
        android:ems="10"
        android:inputType="number"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:ems="10"
        android:inputType="numberSigned"
        app:layout_constraintEnd_toEndOf="@+id/editText1"
        app:layout_constraintStart_toStartOf="@+id/editText1"
        app:layout_constraintTop_toBottomOf="@+id/editText1" />

    <EditText
        android:id="@+id/editText3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:ems="10"
        android:hint="Result"
        android:inputType="numberDecimal"
        app:layout_constraintEnd_toEndOf="@+id/editText2"
        app:layout_constraintStart_toStartOf="@+id/editText2"
        app:layout_constraintTop_toBottomOf="@+id/editText2" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="32dp"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="@+id/editText3"
        app:layout_constraintStart_toStartOf="@+id/editText3"
        app:layout_constraintTop_toBottomOf="@+id/editText3" />

</android.support.constraint.ConstraintLayout>

0
投票

在android studio中,你有一个名为“推断约束”的按钮。

按下该按钮,它将自动为您设置约束。

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