我已经阅读并确认测试结果,资源值的名称(字符串、可绘制、尺寸等)应该在开头加上前缀(通常是库的名称),以避免名称冲突,因为使用库并声明具有匹配名称的资源的项目将覆盖库的资源。
我不清楚的是,在内部的attr属性的名称是否也应该加上前缀。由于它们被包含在中,它们是否受到保护,不会被覆盖?在Java代码中,它们的资源名称自动添加了的名称前缀,但在XML文件中使用时则没有。
我猜它们的使用是上下文相关的。在我的自定义Preference代码中,当我使用特定的styleable调用context.obtainStyledAttributes()时,只有在那个时候XML属性才会被解释为特定类型。如果我声明了一个名为"min"的Preference styleable属性,类型为float,并在我的项目中使用它,那么v7.preference库的SeekBarPreference styleable中也有一个名为"min"的属性,类型为int,因为SeekBar在调用obtainStyledAttributes()时不使用我的styleable,所以这并不重要。
因此,如果我的假设是正确的,编译器不会按名称合并属性。但是,在Android中,自定义属性样式是一个复杂的问题,我不确定在测试中是否遗漏了什么。为了方便使用/文档,省略我的库属性名称中的前缀将是很好的选择。
如果定义了样式的属性,则我认为它仍然安全,因为样式不会合并。它们只从自己的属性中引用彼此。如果我理解得正确——它们对我来说有些复杂。
另外,是否应该为视图ID添加前缀?我认为是的,因为我的库视图存在于项目的视图结构中,如果库的用户在与我的一个ID匹配的ID上调用findViewById(),我可以想象出搜索首先找到我的视图并使他们困惑的情况。但Google自己的appcompat库没有采取这种预防措施,所以我不确定。
我不清楚的是,在内部的attr属性的名称是否也应该加上前缀。由于它们被包含在中,它们是否受到保护,不会被覆盖?在Java代码中,它们的资源名称自动添加了的名称前缀,但在XML文件中使用时则没有。
我猜它们的使用是上下文相关的。在我的自定义Preference代码中,当我使用特定的styleable调用context.obtainStyledAttributes()时,只有在那个时候XML属性才会被解释为特定类型。如果我声明了一个名为"min"的Preference styleable属性,类型为float,并在我的项目中使用它,那么v7.preference库的SeekBarPreference styleable中也有一个名为"min"的属性,类型为int,因为SeekBar在调用obtainStyledAttributes()时不使用我的styleable,所以这并不重要。
因此,如果我的假设是正确的,编译器不会按名称合并属性。但是,在Android中,自定义属性样式是一个复杂的问题,我不确定在测试中是否遗漏了什么。为了方便使用/文档,省略我的库属性名称中的前缀将是很好的选择。
如果定义了样式的属性,则我认为它仍然安全,因为样式不会合并。它们只从自己的属性中引用彼此。如果我理解得正确——它们对我来说有些复杂。
另外,是否应该为视图ID添加前缀?我认为是的,因为我的库视图存在于项目的视图结构中,如果库的用户在与我的一个ID匹配的ID上调用findViewById(),我可以想象出搜索首先找到我的视图并使他们困惑的情况。但Google自己的appcompat库没有采取这种预防措施,所以我不确定。