首页 文章

在Android库项目中替换(或“覆盖”)字符串

提问于
浏览
25

我一直在尝试创建一个android库项目,虽然构建过程工作正常,但是在使用该库的项目中替换资源时遇到了一些麻烦 .

在我的图书馆,我有:

  • A library_layout.xml 包含

<TextView的
android:id = "@+id/str_my_string"
android:layout_width = "wrap_content"
android:layout_text = "wrap_content"

  • 一个调用的java文件

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

  • 包含的资源 strings.xml

<string name =“my_string”>占位符</ string>

在使用我的库的项目中

  • 包含的资源 strings.xml

<string name =“my_string”>实际字符串内容</ string>

我期望的行为是,当我使用库运行项目时,文本视图显示 Actual string content ,但它实际上包含 false .

查看使用该库的应用程序,我确实看到两个 R 文件,并且它们都有 R.string.my_string ,并且这两个文件都等于相同的数值 .

1 回答

  • 59

    我有相同的安排,这对我有用 .

    该库具有布局/类,其中包含对字符串资源的引用:

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

    该库在strings.xml中提供了一个默认值:

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

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

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

    当我在主应用程序strings.xml中为这个资源提供一个值时,我看到应用程序运行时的“Client Since”,当我从主应用程序strings.xml中删除它时,我看到库中的值,“学生自” .

    看来这是基于我在这里阅读的预期行为:http://developer.android.com/tools/sdk/eclipse-adt.html

    以上链接的相关报价:

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

相关问题