我正在研究一个关于支持库和工具栏的示例,这是 Android 文档上的布局代码
<android.support.v7.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
这是我第一次看到这些 ?attr
并且我不知道它们的含义或这些值存储在哪里。这些是自定义的还是在 Android 框架上预定义的?
最佳答案
?attr/
对属性的引用。属性是在应用主题中指定的值。您示例中的属性是支持库提供的主题中指定的所有值。 Android 也有自己的属性,可以与 ?android:attr/
一起使用。 .
最终将使用的实际值取决于用于膨胀所述布局的主题。这个主题可以在 <application/>
的 list 中指定。应用范围主题或 <activity/>
中的 block 阻止特定 Activity 。您还可以在运行时使用不同的上下文覆盖此主题(参见 ContextThemeWrapper 和 LayoutInflater)
在布局中使用主题属性而不是硬编码值被认为是一种很好的做法,因为它允许轻松自定义。例如,当您创建自定义 View 时,您可以使用 ?attr/colorAccent
这样 View 的用户就不必提供颜色,它将使用 colorAccent
而是在应用程序主题中使用。
这在今天变得更加重要,随着 Android Q 中深色主题的引入,您的布局应该指定一个属性,以便在使用浅色主题和深色主题时最终值不同。
关于android - ?attr/在Android上是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38165168/