gpt4 book ai didi

android - 资源覆盖

转载 作者:太空狗 更新时间:2023-10-29 14:36:15 48 4
gpt4 key购买 nike

我正在构建一个 Android 应用程序。它由两个模块组成。具体模块和核心模块。在核心模块中,我定义了基本的应用程序组件、样式和 Activity 。在具体的一个中,我为每个客户进行定制。

我的问题是我在 core > styles.xml > AppTheme > myAttr 中定义了一个属性,我想在 specific > styles.xml > MyAppTheme 中覆盖它(从AppTheme) > myAtrr.结果是,如果我在 XML 布局中使用 ?attr/myAttr,该值始终是核心部分的值,它不会被特定部分值覆盖。

如果我尝试在使用 getActivity().getTheme().obtainStyledAttributes() 的代码中使用该属性,结果是来自核心部分的那个。

任何关于这里发生的事情的想法都是欢迎的,谢谢。

代码结构

我在核心 styles.xml 中定义了一个名为 AppTheme 的主题中的默认资源:

<resources>
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="cat_commstate_loading_transition">@drawable/commstate_loading</item>
</style>

<attr name="cat_commstate_loading_transition" format="reference"/>
</resources>

commstate_loading.xml 定义为:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false"
android:visible="true">

<item
android:duration="225"
android:drawable="@mipmap/commstate_loading_1"/>

<item
android:duration="225"
android:drawable="@mipmap/commstate_loading_2"/>

<item
android:duration="225"
android:drawable="@mipmap/commstate_loading_3"/>

</animation-list>

我这样使用资源:

 <pl.droidsonroids.gif.GifImageView
android:id="@+id/act_challenge_transition_loading_animation"
android:layout_width="150dp"
android:layout_height="150dp"
android:theme="@style/MyAppTheme"
android:layout_gravity="center"
android:src="?attr/cat_commstate_loading_transition" />

所以,我有一个默认动画,它在几个项目中都运行良好。

现在,在我想覆盖资源的情况下,我会像这样扩展核心部分中定义的 AppTheme:

<resources>
<style name="MyAppTheme" parent="@style/AppTheme">
<item name="cat_commstate_loading_transition">@drawable/commstate_loading_corporate</item>
</style>
</resources>

commstate_loading_corporate 资源是:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false"
android:visible="true">

<item
android:duration="225"
android:drawable="@mipmap/commstate_loading_corporate_1"/>

<item
android:duration="115"
android:drawable="@mipmap/commstate_loading_corporate_2"/>

<item
android:duration="115"
android:drawable="@mipmap/commstate_loading_corporate_3"/>

<item
android:duration="115"
android:drawable="@mipmap/commstate_loading_corporate_4"/>

<item
android:duration="115"
android:drawable="@mipmap/commstate_loading_corporate_5"/>

</animation-list>

在我看来,此时,引用 ?attr/cat_commstate_loading_transition 应该引用 commstate_loading_corporate 资源,因为我覆盖了它。

最佳答案

我建议你使用 product flavors .借助产品口味,您可以定义 source sets并覆盖核心模块的任何部分(资源、 Assets 、java 源代码)。

关于android - 资源覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55044217/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com