2010-11-24 85 views
24

我一直在试图制作一个android库项目,虽然构建过程正常,但我一直遇到一些麻烦,无法替换项目中的资源它使用库。在Android库项目中替换(或“覆盖”)字符串

在我的图书馆,我有:

  1. 一个library_layout.xml

    <的TextView
    机器人:ID = “@ + ID/str_my_string”
    的android:layout_width = “WRAP_CONTENT”
    android:layout_text =“wrap_content”
    >

  2. 这是一个java文件,它调用

    ((TextView)this.findViewById(R.id.str_my_string))。setText(R.string.my_string);

  3. 资源strings.xml

    <字符串名称= “my_string” >占位符< /串>

在项目中使用我

  1. 的资源库strings.xml

    <字符串名称=“my_string” >实际字符串内容< /串>

我期望的行为是,当我使用的库运行该项目,文本视图显示实际字符串内容,但它实际上包含虚假

寻找在使用该库的应用程序,我看到两个R文件,它们都有R.string.my_string和这两个都等于相同的数值。

回答

56

我有相同的安排,这对我的预期效果。

库有布局/类与此参照字符串资源:

<TextView android:id="@+id/studentSinceLabel"> 

图书馆提供在其strings.xml中的默认值:

<string name="studentSinceLabel">Student Since</string> 

主要应用程序有此值在其strings.xml中:

<string name="studentSinceLabel">Client Since</string> 

当我在主应用程序中为此资源提供值时trings。xml,当应用程序运行时,我看到“Client Since”,当我从主应用程序strings.xml中删除它时,我看到库中的值“Student Since”。 http://developer.android.com/tools/sdk/eclipse-adt.html

相关报价从上面的链接:

看来,这是基于我的阅读此预期的行为

在情况下,资源ID在应用程序和库都定义,这些工具可确保在应用程序中声明的资源获得优先权,并且库项目中的资源不会编译到应用程序.apk中。这使您的应用程序能够灵活地使用或重新定义在任何库中定义的任何资源行为或值。

+0

因此,看起来我只是在使用Eclipse时没有清理掉旧版本的问题。 – jwriteclub 2011-04-12 20:39:58