如何引用ViewPagerIndicator库中定义的主题样式?
How to referenced a theme style that defined in the library of ViewPagerIndicator?
我正在通过构建 gradle 使用 ViewPageIndicator。我觉得 ViewPageIndicator 样式文件中提供的主题不适合我。
所以我想去主题文件目的地做一些修改,这样它就能满足我的需要。但是,Android Studio 弹出通知说找不到要前往的声明。
有人知道怎么解决吗?
我刚刚找到了这个问题的答案。我们可以使用 Android 提供的设计工具来定位我们项目中存在的任何主题文件。首先打开任何一个布局文件并切换到设计视图。接下来,选择您想要查看的主题布局,然后单击提取资源按钮以提取资源并为其创建名称。完成后,您会看到您刚刚命名的样式出现在您的样式文件中。但是现在这个样式文件还是指向原来的库文件,所以只能看,不能修改。只要我们能够阅读它,我们就可以将它复制并粘贴到其他地方。所以我们应该复制这些内部代码来粘贴我们创建的文件(文件名不能与原始文件名相同)。解决方案是先访问所有原始文件,然后将其复制并粘贴到新文件中。然后将您的主题引用到您刚刚创建的文件。您可以随时随地对创建的文件进行自由修改。
enter image description here
我通过在我的自定义应用程序主题中引用特定的库样式来解决它。如果你看 source code of ViewPageIndicator
您会看到可以覆盖指示器样式的挂钩:
- vpiIconPageIndicatorStyle
- vpiCirclePageIndicatorStyle
- ...
这些是Widget样式的基本参考。例如,对于 CirclePageIndicator,您应该扩展 Widget 主题并将其 link 扩展为 vpiCirclePageIndicatorStyle。然后,您可以设置所有 Widget 属性以及可以在 attributes.
中找到的自定义 CirclePageIndicator 属性
我的主题文件(styles.xml)关于 ViewPagerindicator:
<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="vpiCirclePageIndicatorStyle">@style/Widget.CirclePageIndicator</item>
...
</style>
<style name="Widget.CirclePageIndicator" parent="Widget">
<item name="android:layout_marginBottom">10dp</item>
<item name="android:layout_marginTop">5dp</item>
<item name="android:padding">3dp</item>
<item name="fillColor">@color/borders</item>
<item name="gapWidth">@dimen/view_pager_circle_page_indicator_gap</item>
<item name="radius">@dimen/view_pager_circle_page_indicator_radius</item>
<item name="strokeColor">@color/borders</item>
<item name="strokeWidth">@dimen/view_pager_circle_page_indicator_stroke</item>
</style>
并且在布局xml中,不需要指定style="@style/..." 属性.
<com.viewpagerindicator.CirclePageIndicator
android:id="@+id/pagerIndicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
最终结果:
我正在通过构建 gradle 使用 ViewPageIndicator。我觉得 ViewPageIndicator 样式文件中提供的主题不适合我。
所以我想去主题文件目的地做一些修改,这样它就能满足我的需要。但是,Android Studio 弹出通知说找不到要前往的声明。
有人知道怎么解决吗?
我刚刚找到了这个问题的答案。我们可以使用 Android 提供的设计工具来定位我们项目中存在的任何主题文件。首先打开任何一个布局文件并切换到设计视图。接下来,选择您想要查看的主题布局,然后单击提取资源按钮以提取资源并为其创建名称。完成后,您会看到您刚刚命名的样式出现在您的样式文件中。但是现在这个样式文件还是指向原来的库文件,所以只能看,不能修改。只要我们能够阅读它,我们就可以将它复制并粘贴到其他地方。所以我们应该复制这些内部代码来粘贴我们创建的文件(文件名不能与原始文件名相同)。解决方案是先访问所有原始文件,然后将其复制并粘贴到新文件中。然后将您的主题引用到您刚刚创建的文件。您可以随时随地对创建的文件进行自由修改。 enter image description here
我通过在我的自定义应用程序主题中引用特定的库样式来解决它。如果你看 source code of ViewPageIndicator 您会看到可以覆盖指示器样式的挂钩:
- vpiIconPageIndicatorStyle
- vpiCirclePageIndicatorStyle
- ...
这些是Widget样式的基本参考。例如,对于 CirclePageIndicator,您应该扩展 Widget 主题并将其 link 扩展为 vpiCirclePageIndicatorStyle。然后,您可以设置所有 Widget 属性以及可以在 attributes.
中找到的自定义 CirclePageIndicator 属性我的主题文件(styles.xml)关于 ViewPagerindicator:
<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="vpiCirclePageIndicatorStyle">@style/Widget.CirclePageIndicator</item>
...
</style>
<style name="Widget.CirclePageIndicator" parent="Widget">
<item name="android:layout_marginBottom">10dp</item>
<item name="android:layout_marginTop">5dp</item>
<item name="android:padding">3dp</item>
<item name="fillColor">@color/borders</item>
<item name="gapWidth">@dimen/view_pager_circle_page_indicator_gap</item>
<item name="radius">@dimen/view_pager_circle_page_indicator_radius</item>
<item name="strokeColor">@color/borders</item>
<item name="strokeWidth">@dimen/view_pager_circle_page_indicator_stroke</item>
</style>
并且在布局xml中,不需要指定style="@style/..." 属性.
<com.viewpagerindicator.CirclePageIndicator
android:id="@+id/pagerIndicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
最终结果: