代码之家  ›  专栏  ›  技术社区  ›  jwriteclub Himanshu Shukla

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

  •  27
  • jwriteclub Himanshu Shukla  · 技术社区  · 15 年前

    我一直在尝试创建一个android库项目,虽然构建过程运行良好,但在替换使用该库的项目中的资源时遇到了一些问题。

    在我的图书馆里我有:

    1. 一个 library_layout.xml 包含

      <文本框
      android:id=“@+id/str\u我的字符串”
      android:layout_width=“包装内容”
      android:layout_text=“包装内容”
      >

    2. 调用

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

    3. 资源 strings.xml 包含

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

    在使用图书馆的项目中

    1. 资源 字符串.xml 包含

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

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

    在使用库的应用程序中,我 做 见二 R 文件,两个都有 R.string.my_string 这两个值都等于同一个数值。

    1 回复  |  直到 15 年前
        1
  •  63
  •   Mario Kutlev Domi    12 年前

    我有同样的安排,这对我来说是意料之中的事。

    库中的layout/class引用了字符串资源:

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

    库在strings.xml中提供默认值:

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

    主应用程序的strings.xml中包含此值:

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

    当我在main apps strings.xml中为这个资源设置一个值时,我看到“Client Since”当应用程序运行时,当我从main apps strings.xml中删除它时,我看到库中的值“Student Since”。

    根据我在这里的阅读,这似乎是预期的行为: http://developer.android.com/tools/sdk/eclipse-adt.html

    以上链接中的相关引用:

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

    推荐文章