4

我是android开发的新手,我现在正在尝试创建我的自定义视图。我遇到了很多问题。我已经解决了其中一些,但最难理解的是属性。让我们以带有属性的示例 xml 文件为例

<declare-styleable name="ViewPagerIndicator">
        <!-- Style of the circle indicator. -->
        <attr name="vpiCirclePageIndicatorStyle" format="reference"/>
        <!-- Style of the icon indicator's views. -->
        <attr name="vpiIconPageIndicatorStyle" format="reference"/>
        <!-- Style of the line indicator. -->
        <attr name="vpiLinePageIndicatorStyle" format="reference"/>
        <!-- Style of the title indicator. -->
        <attr name="vpiTitlePageIndicatorStyle" format="reference"/>
        <!-- Style of the tab indicator's tabs. -->
        <attr name="vpiTabPageIndicatorStyle" format="reference"/>
        <!-- Style of the underline indicator. -->
        <attr name="vpiUnderlinePageIndicatorStyle" format="reference"/>
    </declare-styleable>
    <attr name="centered" format="boolean" />
    <attr name="selectedColor" format="color" />
    <attr name="strokeWidth" format="dimension" />
    <attr name="unselectedColor" format="color" />

    <declare-styleable name="CirclePageIndicator">
        <attr name="centered" />
        <attr name="fillColor" format="color" />
        <attr name="pageColor" format="color" />
        <attr name="android:orientation"/>
        <attr name="radius" format="dimension" />
        <attr name="snap" format="boolean" />
        <attr name="strokeColor" format="color" />
        <attr name="strokeWidth" />
        <attr name="android:background"/>
    </declare-styleable>
<declare-styleable name="LinePageIndicator">
    <attr name="centered" />
    <attr name="unselectedColor" />
    <attr name="selectedColor" />
    <attr name="lineWidth" format="dimension" />
    <attr name="strokeWidth" />
    <attr name="gapWidth" format="dimension" />
    <attr name="android:background"/>
</declare-styleable>
  1. 参考格式是什么意思,我仍然无法理解这种格式是什么意思,我发现它可以与可绘制对象一起使用,我也看到可以与主题一起使用。请举一个很好的例子,它在哪里有用,这种格式类型的主要目的是什么。在前面的示例中,它用于样式,但我不明白如何在我将使用自定义视图的 xml 文件中使用它。
   <com.viewpagerindicator.CirclePageIndicator
        android:id="@+id/indicator"
        android:padding="10dip"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        custom:auto_cycle="true"
    custom:pageColor="@color/abc_background_cache_hint_selector_material_dark"
        />
  1. 据我所知,每一declare-styleable name="Name of custom view"行都用于单独的自定义视图,我们可以在示例中看到这一点。但是目的是什么<declare-styleable name="ViewPagerIndicator">,我在这个库中没有找到任何具有这样名称的视图,并且这个样式包含我的第一个问题(参考属性)。

  2. 如果属性声明在 declare-stylable 之外,则意味着它在多个视图中,而不是在每个视图中重复代码,公共属性放在外面。我对吗 ?

请帮忙,我花了一天时间试图找到任何教程或文档。官方文档很差。我想很多新手会很感激解释这个话题。

请帮助理解这一点,最重要的问题是关于参考(第一个问题) <attr name="vpiCirclePageIndicatorStyle" format="reference"/>这是什么,如何使用它,它在哪里声明?

我还发现了另一个库中使用的另一个示例

<declare-styleable name="Themes">
    <attr name="SliderStyle" format="reference"/>
    <attr name="PagerIndicatorStyle" format="reference"/>
</declare-styleable>

我完全无法理解这一点。请帮忙,你是我最后的希望。

4

1 回答 1

6

AFAIK,引用允许您在该属性中引用其他可绘制对象和样式。

<declare-styleable name="Theme">
    <attr name="indicatorStyle" format="reference"/>
</declare-styleable>

这使我可以声明以后可以获取的自定义样式

<style name="AppTheme.Platform.NoActionBar" parent="Theme.AppCompat.NoActionBar">
    <item name="indicatorStyle">@style/ViewPagerIndicator</item>
</style>

现在我可以在 XML 中使用它

style="?attr/indicatorStyle"

如果我尝试在未声明它的主题中使用此属性,我会收到错误消息。这就是ViewPagerIndicator样式的用途,在应用程序主题中声明自定义属性。我没有得到你的第三个问题,但这应该涵盖前两个。

于 2015-07-19T15:44:17.970 回答