如何将颜色传递到Android库?

eanckbw9  于 2023-02-06  发布在  Android
关注(0)|答案(2)|浏览(91)

我正在创建一个android库,我想知道将颜色从主应用模块传递到我的库的最佳方法。
我的颜色文件中有以下颜色。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="textColor1">#848484</color>
    <color name="textColor2">#99848484</color>
    <color name="textColor3">#676767</color>
    <color name="textColor4">#e7e6e6</color>
</resources>

我想做的是让库的用户能够以编程方式传递这些颜色的值,这样我就可以在库中以正常的方式使用它们:
在XML中:

android:textColor="@color/textColor1"

或者在Java中:

setTextColor(ActivityCompat.getColor(context, R.color. textColor1));
kcrjzv8t

kcrjzv8t1#

创建此功能方法有很多,下面是其中之一:在Libray中创建实用程序类:

class Utility{
public static int myColor = 0;    
     public void setColor (@ColorInt int colorId){ // integer id 
         myColor = colorId;
     }

}

在库中的任意位置使用此colorId
例如

textView.setTextColor(ContextCompact.getColor(context, Utility.myColor);

应用项目中的颜色,例如:

Utility.setColor(R.color.colorPrimary);
sy5wg1nm

sy5wg1nm2#

资源合并的工作方式是,如果我们设置tools:override="true"属性,那么root-app的资源将覆盖库的资源(-ies)。
我是说,在根应用程序的colors.xml文件中,执行以下操作:

<color name="myColor" tools:override="true">#AABBCC</color>

但是我们不喜欢为每个资源添加所述属性,因此我创建了colors_overrides.xml文件(在我的colors.xml文件旁边),并将所述属性直接添加到resource元素,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources
    xmlns:tools="http://schemas.android.com/tools"
    tools:override="true">
    <color name="myColor">#AABBCC</color>
</resources>

相关问题