出于好奇,为什么 ConstraintLayout 和 LinearLayout 声明不一致?

Out of curiosity, why are ConstraintLayout and LinearLayout declared inconsistently?

在Android文档中,您需要编写android.support.constraint.ConstraintLayout来声明一个ConstraintLayout。要声明一个 LinearLayout,您只需要 LinearLayout。为什么这不一致?

例如:(直接取自 Android 文档)

约束布局

<android.support.constraint.ConstraintLayout ...>
             <Button android:id="@+id/button" ...
                 app:layout_constraintLeft_toLeftOf="parent"
                 app:layout_constraintRight_toRightOf="parent/>
         </>

线性布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingLeft="16dp"
   android:paddingRight="16dp"
   android:orientation="horizontal"
   android:gravity="center">

   <!-- Include other widget or layout tags here. These are considered
           "child views" or "children" of the linear layout -->

 </LinearLayout>

为什么你不能只写 <ConstraintLayout ... 而不是 That's Just the Way it Is

Why isn't this consistent?

LinearLayout 是一个框架 class,在 android.widget 中。框架 LayoutInflater 知道在某些包中查找 android.widget 等裸 class 名称,例如 LinearLayout.

ConstraintLayout 来自图书馆。框架 LayoutInflater 对这个库一无所知,它不会在 android.widget 或其他框架包中找到 ConstraintLayout

对于库提供的 classes,我们需要在 XML 元素中完全限定 class 名称。