android:layout_height="?attr/actionBarSize" 是什么意思

What is the meaning of android:layout_height="?attr/actionBarSize"

我正在尝试理解标题中的代码行。 我明白 ? 意味着该值将从主题中获取。 但是当它带有前缀attrs时,我知道它是在android系统的某个地方定义的。 我还看到应用程序中选定的主题是 Theme.AppCompat.NoActionBar 的 child,它没有确定 actionBarSize[=23 的值=]:

<style name="Theme.AppCompat.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>



<declare-stylable name="Theme">
<attr name="actionBarSize" format="dimension" >
        <enum name="wrap_content" value="0" />
    </attr>

我还在一些 GitHub 资源中找到了一个主题(名称为 Theme),它确实为 actionBarSize 赋予了价值,但这个主题似乎并不是新 android api 的任何 parent 链中的 parent: Theme.xml

如您所见,.NoActionBar 提供的仅有的两个属性是:

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

其余属性继承自该样式的父项。在 .NoActionBar 的父样式链中是 Base.V21.Theme.AppCompat.Light,它设置 actionBarSize:

<item name="actionBarSize">?android:attr/actionBarSize</item>

在这种情况下,?android: 前缀表示它直接来自 Android 平台,将其设置为 56dp

如果您查看您的风格的快速文档,您可以看到所有这些:


除此之外,android:layout_height="?attr/actionBarSize" 的意思是 视图应该与操作栏的高度相同。最终值变成 56dp 并不重要;关键是,无论实际值是多少,这个视图都会那么高。