?attr/ 在 Android 上是啥意思?

Posted

技术标签:

【中文标题】?attr/ 在 Android 上是啥意思?【英文标题】:What does ?attr/ mean on Android??attr/ 在 Android 上是什么意思? 【发布时间】:2016-11-05 00:46:05 【问题描述】:

我正在研究一个关于支持库和工具栏的示例,这是 android 文档上的布局代码

<android.support.v7.widget.Toolbar
    android:id="@+id/my_toolbar"
    android:layout_
    android:layout_
    android:background="?attr/colorPrimary"
    android:elevation="4dp"
    android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

这是我第一次看到这些?attr,但我不知道它们的含义或这些值存储在哪里。这些是自定义的还是在 Android 框架上预定义的?

参考:Android Toolbar Documentation

【问题讨论】:

【参考方案1】:

?attr/ 对属性的引用。属性是在应用主题中指定的值。您示例中的属性是支持库提供的主题中指定的所有值。 Android 也有自己的属性,可以与?android:attr/ 一起使用。

最终将使用的实际值取决于用于膨胀所述布局的主题。此主题可以在清单中的 &lt;application/&gt; 块中为应用程序范围的主题指定,或在 &lt;activity/&gt; 块中为特定活动指定。您还可以在运行时使用不同的上下文覆盖此主题(请参阅 ContextThemeWrapper 和 LayoutInflater)

在布局中使用主题属性而不是硬编码值被认为是一种很好的做法,因为它允许轻松自定义。例如,当您创建自定义视图时,您可以使用?attr/colorAccent,这样视图的用户就不必提供颜色,而是使用应用程序主题中使用的colorAccent

这在今天变得更加重要,随着 Android Q 中深色主题的引入,您的布局应该指定一个属性,以便在使用浅色主题和深色主题时最终值不同。

【讨论】:

“属性是在您的应用主题中指定的值”。哪个主题? android中有很多主题。如果可能,需要更多解释和示例【参考方案2】:

样式属性资源允许您引用 当前应用的主题中的属性。

https://developer.android.com/guide/topics/resources/accessing-resources.html#ReferencesToThemeAttributes

【讨论】:

【参考方案3】:

而不是设置静态颜色(#ffffff@color 资源) 我们可以使用?attr/themeAttributeName 委托给主题 句法。此语法意味着:查询主题以获取 this 的值 语义属性。

Medium 上的 post 对样式和主题进行了相当详细的解释。

【讨论】:

以上是关于?attr/ 在 Android 上是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

医学上bo是啥意思(bo在医学上是啥意思)

[[:print:]] 在目录路径上是啥意思?

说 nodeJS 建立在 V8 引擎上是啥意思?

确保某些属性(例如 android:attr/textAppearanceMedium)在不同版本的 Android 上工作的可移植方式是啥

子进程中的“shell”参数在 Windows 上是啥意思?

ik是啥意思?