0

我试图理解标题中的代码行。我明白了吗?表示该值将从主题中获取。 但是当它带有前缀 attrs 时,我知道它是在 android 系统的某个地方定义的。我还看到应用程序中选定的主题是Theme.AppCompat.NoActionBar的子主题,它不能确定 actionBarSize 的

<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 的任何父链中的父级: Theme.xml

4

1 回答 1

1

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

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

其余属性继承自该样式的父级。在 is 的父样式链中.NoActionBarBase.V21.Theme.AppCompat.Light它设置actionBarSize

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

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

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

在此处输入图像描述


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

于 2020-03-14T22:57:52.290 回答