android - 是否可以将自定义属性添加到 android 资源的样式中?

标签 android styles

我在我的项目中使用了 View 流组件,它允许开发人员覆盖一些属性,例如:

<org.taptwo.android.widget.TitleFlowIndicator
    ...
    app:footerTriangleHeight="0dip"
    ... />

我正在将此组件重用到多个布局中,并且我想将属性放入一个样式中。 但是当我这样做时,解析器会显示 Error: No resource found that match the given name: attr 'app:footerTriangleHeight',即使我在样式文件中添加了命名空间。

有没有办法在android中做到这一点?

谢谢。

最佳答案

Android 应用程序

如果您不使用 Android 库,那么您可以执行以下操作:

  1. 定义自定义样式属性(我猜你已经这样做了)。
  2. 不要在样式项中使用命名空间前缀(命名空间默认为当前应用的命名空间)。

例子:

attrs.xml 中:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="testAttr" format="string"/>        
</resources>

styles.xml 中:

<?xml version="1.0" encoding="utf-8"?>
<resources>        
    <style name="TestStyle" >
      <item name="testAttr">asdf</item>
    </style>        
</resources>

Android 库

如果自定义属性来自 Android 库,您仍然可以使用描述的方法。理论上它应该可以工作,因为 Android 库的命名空间与应用程序的命名空间相同(在构建期间从 aapt 工具的角度来看)。但我自己没有测试过。


如果您指定命名空间,它将显示错误。据我所知,样式不支持 xml 命名空间。所以这将失败:

styles.xml 中:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:app="http://schemas.android.com/apk/res/app.package.name">        
    <style name="TestStyle" >
      <item name="app:testAttr">asdf</item>
    </style>        
</resources>

解析器自动默认为当前应用的 AndroidManifest 命名空间,但您不能明确指定此命名空间。

关于android - 是否可以将自定义属性添加到 android 资源的样式中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7230358/

相关文章:

java - 房间数据库 RawQuery() 不适用于 "IN"和 "NOT IN"子句

android - Android 支持 Teredo 吗?

android - 如何让状态栏透明但导航栏不透明?

c# - 如何从 WPF 表单中删除边框/控制框?

css - Openlayers Feature.Vector 只使用默认样式

css - 找出给定页面上使用的 CSS 样式

css - JavaFX 工具提示定制

android - cordova 文件传输插件下载未显示在图片库中

android - 如何在 Crittercism 门户网站上查看设备方向

android - 创建一个按钮数组,只有在单击钛中的上一个按钮时才可见