约束布局不起作用,可能是设计编辑器中的错误?

时间:2017-07-27 04:43:02

标签: android layout constraints android-constraintlayout

我正在用android studio创建我的第一个应用程序,这是我的第一个问题:

我想尝试ConstraintLayout。我使用Design Editor(一起单击它)使用ConstraintLayout构建了布局。当我在Android模拟器中尝试布局时,所有按钮都在左上角移动:( 除了" Hello World"我创建第一个项目时自动生成的标签。

Label和Button之间的区别在于,缺少以app:layout_constraint ....开头的一些代码行。你可以在Code中看到它。

我做错了什么,或者它是一个错误? 我很乐意回答! :)

<?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.u0017007.coffeecounter.MainActivity">

    <TextView
        android:layout_width="136dp"
        android:layout_height="30dp"
        android:text="Hello World!"
        android:textSize="24sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.234" />

    <Button
        android:id="@+id/buttonAddCoffee"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="false"
        android:text="@string/add_coffee"
        tools:layout_editor_absoluteX="16dp"
        tools:layout_editor_absoluteY="231dp" />

    <Button
        android:id="@+id/buttonRemoveCoffee"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/remove_coffee"
        tools:layout_editor_absoluteX="236dp"
        tools:layout_editor_absoluteY="231dp" />

</android.support.constraint.ConstraintLayout>

3 个答案:

答案 0 :(得分:3)

从上面的代码看来,你没有向按钮添加任何约束,这就是他们移动到左上角的原因。

<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">

    <TextView
        android:layout_width="136dp"
        android:layout_height="30dp"
        android:text="Hello World!"
        android:textSize="24sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.234" />

    <Button
        android:id="@+id/buttonAddCoffee"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="false"
        android:text="ADD coffee"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="276dp"
        app:layout_constraintRight_toLeftOf="@+id/buttonRemoveCoffee"
        android:layout_marginRight="82dp"
        android:layout_marginLeft="24dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintHorizontal_bias="1.0" />

    <Button
        android:id="@+id/buttonRemoveCoffee"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="remove coffee"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="276dp"
        android:layout_marginRight="24dp"
        app:layout_constraintRight_toRightOf="parent" />

</android.support.constraint.ConstraintLayout>

请参阅下面的链接 -

https://www.youtube.com/watch?v=z53Ed0ddxgM

答案 1 :(得分:3)

tools:layout_editor_absoluteXtools:layout_editor_absoluteY仅用于预览,与所有tools:XXXX一样 您需要为视图添加约束。您可以添加XML,也可以使用可视化编辑器。

有一个很好的website可以解释ConstraintsLayout的所有内容。

顺便说一句,如果你没有设置约束,Android Studio会给你一个错误This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you add constraints

答案 2 :(得分:0)

工具:layout_editor_absoluteX = “236dp”

工具:layout_editor_absoluteY = “231dp”

工作室使用它们仅在图形编辑器中渲染。在运行期间,

由于未设置约束,视图采用默认位置(0,0)。

尝试在按钮和过程

上设置一些约束