【发布时间】:2019-12-08 07:34:04
【问题描述】:
我看过一些人写的这个
app:theme="@style/xyz"
& 另一方面,有些人写
android:theme="@style/xyz"
这两个代码有什么区别?
【问题讨论】:
标签: android android-studio checkbox themes
我看过一些人写的这个
app:theme="@style/xyz"
& 另一方面,有些人写
android:theme="@style/xyz"
这两个代码有什么区别?
【问题讨论】:
标签: android android-studio checkbox themes
app 和 android 实际上是命名空间。您可以将它们视为与 java 中的 packages 相同的方式。
android 命名空间包含来自默认视图的属性,而 app 指的是来自应用程序命名空间的属性,例如来自自定义视图。
所以当您编写android:theme 时,它将使用主题属性,该属性是默认视图的一部分,例如 TextView(Android 的一部分)。现在,当您使用app:theme 时,这意味着您正在谈论的是自定义主题属性,而不是默认属性。
当您构建扩展另一个视图的 CustomView 并且您还想更改 theme 属性分配值的方式时,这可能很有用,例如,您可能希望构建一个自定义视图以向 TextView 添加阴影并且您希望在主题中提供阴影颜色。
来自 AppCompat 库的视图使用 app:theme 制作自己的 android:theme 版本以支持旧版本。
TLDR; 使用 android:theme 使用 View 的默认主题功能,而 app:theme 用于自定义视图中的自定义主题功能。如果您使用的是 AppCompatView 或自定义视图,请在可用时使用 app:theme,否则使用 android:theme。
如果我在 MaterialDesign/AppCompat 或任何其他自定义视图中使用 android:theme 而不是 app:theme 会发生什么?
如果您这样做,所有视图中可用的视图属性将是可自定义的,但自定义视图添加的任何新属性将无法通过主题进行自定义。
【讨论】: