书籍
《第一行代码 Android》第三版
开发 环境
Android Studio Jellyfish | 2023.3.1
问题
在学习3.2.2 创建和加载布局章节,在first_layout.xml中增加一个按钮button1时报错:"button1 <Button>: Missing Constraints in ConstraintLayout"
分析
产生这个问题的原因是约束布局中 , 如果不给组件添加约束 , 就会报该错误.
android studio创建xml布局文件时是自动基于androidx.constraintlayout.widget.ConstraintLayout约束布局且仅有该布局可选的.所以会产生该问题.
<androidx.constraintlayout.widget.ConstraintLayout ...>
</androidx.constraintlayout.widget.ConstraintLayout>
解决方法
有两种方式可以解决该问题:
一是给该控件增加约束
首先先通过xmlns:app="http://schemas.android.com/apk/res-auto"中定义一个命名控件.
xmlns:app
是 XML 中的一个属性,用于定义一个自定义的命名空间。这个命名空间可以用来限定 XML 元素和属性的名称,以防止名称冲突。在 Android 开发中,xmlns:app
是一个常见的用法,它允许你使用 Android 特有的属性和样式,而不会和其他命名空间冲突。
然后在控件Button中通过以下代码实现控件约束:
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button 1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
增加以上代码后,就不再报改错了.
二是忽略缺失约束检查
可以通过手动或者自动忽略缺失约束,这样也能解决该错误.
自动方式是点击在<Button控件前面的红色报错按钮,然后点击Suppress: Add tools:ignore="MissingConstraints" attribute这个就可以自动添加该属性了.
手动方式是在Button控件中增加一个属性即可:tools:ignore="MissingConstraints"
参考链接
【错误记录】约束布局报错 ( Missing Constraints in ConstraintLayout. This view is not constrained. It only has )_this view is not constrained. it only has designti-CSDN博客