【问题标题】:Out of curiosity, why are ConstraintLayout and LinearLayout declared inconsistently?出于好奇,为什么 ConstraintLayout 和 LinearLayout 声明不一致?
【发布时间】:2019-08-28 20:38:37
【问题描述】:

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

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

【问题讨论】:

    标签: android android-linearlayout android-constraintlayout


    【解决方案1】:

    为什么不一致?

    LinearLayout 是一个框架类,在android.widget 中。框架LayoutInflater 知道在某些包(例如android.widget)中查找诸如LinearLayout 之类的裸类名称。

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

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

    【讨论】:

    • 自己的答案很有趣,但是问题变成了“为什么AppCompatViewInflater 不为您处理这种情况”,并检查android.support* / androidx.widget.* 事物的前缀.
    • @EpicPandaForce:没有要求将ConstraintLayout 与 AppCompat 一起使用。您可以将ConstraintLayout 与普通的非AppCompat 活动或片段一起使用。而且,在这种情况下,您正在使用框架LayoutInflater。此外,您假设 AppCompat 对ConstraintLayout 有所了解,并且在该方向上也没有依赖关系。他们可能会在其中破解一些东西,但我的猜测是,他们将 AppCompat 元素恶作剧纯粹限制为 AppCompat 小部件,而不是与 AppCompat 无关的任意其他小部件(RecyclerView、CardView 等)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 2011-10-31
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    相关资源
    最近更新 更多