我需要一些帮助,我已经浏览了一段时间,但是我找到的主题都不能解决我的问题。希望你能帮助我!
我们开始:我有一个自定义视图,我们称之为custom view。
它还有一些自定义属性,在attrs.xml文件中定义,如下所示:

<declare-styleable name="CustomView">
    <attr name="customBackgroundColor" format="color"/>
    <attr name="customTextColor" format="color"/>
    <attr name="customWhatever" format="dimension"/>
</declare-styleable>

此视图是我要创建的库的一部分,因此我可以在多个项目中使用它。
有趣的是:实际上,我经常使用这个视图,所以我想在styles.xml中定义一个样式来定义它的属性,所以我不必在每个XML布局文件中使用这个视图来编辑它的属性。像这样的:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="customViewStyle">@style/myCustomViewStyle</item>
</style>

<style name="myCustomViewStyle" parent="CustomViewStyle">
    <item name="customBackgroundColor">@color/red</item>
    <item name="customTextColor">@color/blue</item>
    <item name="customWhatever">@dimen/someHeight</item>
</style>

所以我的问题是:如何定义这个“customviewstyle”键,如果可能的话,如何从中获取信息?
另外:我可以通过这样做来创建这个“customviewstyle”键:
<attr name="customViewStyle" format="reference"/>

但我还没有找到如何利用它。

最佳答案

如何定义此“customViewStyle”键?
<attr name="customViewStyle" format="reference"/>,在任何<declare-styleable>标记之外。
但我还没有找到如何利用它。
创建具有所需特性的样式。你已经在文章中使用了MyCustomViewStyle条目,但是你给了它一个不存在的父样式(据我所知)。我可能会使用“parent=”android:widget“,除非有其他更合适的方法。
我假设您的自定义视图类已经使用TypedArray从xml读取属性:

TypedArray a = context.obstainStyleAttributes(attrs, R.styleable.CustomView,
        R.attr.customViewStyle, 0);

用刚定义的默认样式替换最后一个参数:
TypedArray a = context.obstainStyleAttributes(attrs, R.styleable.CustomView,
        R.attr.customViewStyle, R.style.MyCustomViewStyle);

10-04 17:36