【问题标题】:how does appcompat library styling workappcompat 库样式如何工作
【发布时间】:2015-03-30 03:00:43
【问题描述】:

我对 appcompat 库中的样式如何工作感到很困惑。

根据here

我们现在对所有工具栏/ActionBar 的支持实现 平台意味着我们不再阅读任何 android: 属性 与操作栏相关。

对于已有 appcompat 设置的应用,这意味着 您应该删除您的 v14+ 主题,这些主题在 安卓命名空间。请注意,这仅适用于 影响操作栏的样式/小部件。

对于大多数应用程序,您现在只需要一个主题声明,在 values/

所以这是我的问题:

如果我想在 API 14+ 中使用 Material Design ActionBar,我可以只使用 appcompat_v7 中提供的 ActionBar/Toolbar 并将其设置在 common value/ 文件夹中并删除“android:”命名空间吗?但是为什么我看到人们在下面写代码:

<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ....
    <item name="windowContentOverlay">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    ....
</style>

为什么有“android:”命名空间?上面的代码和使用 value-v21, value-v14, 文件夹有什么区别?

有人可以解释或指导我找到正确的来源吗?

【问题讨论】:

  • 你在使用ActionBarSherlock吗?这不是官方图书馆。谷歌所说的任何内容可能适用也可能不适用于它。
  • @karaokyo 我不是,我只是举个例子
  • 那么这可能只是意味着您正在查看的任何代码都没有使用支持库的 v21。
  • @karaokyo 所以你的意思是如果我使用 v21 支持库那么我不需要“android:”项目?
  • 那篇文章不是这么说的。它说 appcompat 库不会在 android 命名空间属性中查找操作栏样式。 IE。它应该只是您的values/ 文件夹中的app:windowContentOverlay

标签: android styles android-appcompat


【解决方案1】:

是的,如果您使用 AppCompat v21+,您只需要一个父主题为 Theme.AppCompat(或诸如 Theme.AppCompat.Light 的子主题)的单个主题,并且您确实不需要需要 android:操作栏/窗口相关标志的命名空间属性,也不是 v14、v20 等的单独主题。AppCompat 提供的所有 API 级别的顶级属性的完整列表可以在AppCompat R.styleable Theme 中找到。

互联网上的大部分代码(包括 developer.android.com 网站的部分内容)仍然是为 v21 之前的 AppCompat 编写的,确实需要android: 和非前缀版本。

【讨论】:

  • 谢谢!这很有帮助。但是当我尝试在没有android:的情况下设置appcompat actionbar的elevationbackground时,它没有任何效果,你能解释一下为什么吗?
  • 您应该使用colorPrimary 为操作栏着色,并使用getSupportActionBar().setElevation() 以向后兼容的方式设置海拔 - 不幸的是,我不知道通过 XML 设置海拔的方法向后兼容的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 2015-04-19
  • 2015-07-03
  • 1970-01-01
相关资源
最近更新 更多