?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/
一起使用。
最终将使用的实际值取决于用于膨胀所述布局的主题。此主题可以在清单中的 <application/>
块中为应用程序范围的主题指定,或在 <activity/>
块中为特定活动指定。您还可以在运行时使用不同的上下文覆盖此主题(请参阅 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 上是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
确保某些属性(例如 android:attr/textAppearanceMedium)在不同版本的 Android 上工作的可移植方式是啥