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

jwr*_*lub 29 android android-layout eclipse-adt android-library

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

在我的图书馆,我有:

  1. 一个library_layout.xml含有

    <TextView
    android: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包含的资源

    <string name ="my_string">占位符</ string>

在使用我的库的项目中

  1. strings.xml包含的资源

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

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

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

小智 63

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

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

<TextView android:id="@+id/studentSinceLabel">
Run Code Online (Sandbox Code Playgroud)

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

<string name="studentSinceLabel">Student Since</string>
Run Code Online (Sandbox Code Playgroud)

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

<string name="studentSinceLabel">Client Since</string>
Run Code Online (Sandbox Code Playgroud)

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

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

以上链接的相关报价:

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

  • 这是确切的,但如果在库中翻译字符串,它将失败.lib中的翻译版本会覆盖use-app版本(已翻译或未翻译).所以吸取了教训:不要翻译占位符字符串. (6认同)
  • 实际上,我已经找到了翻译文本的解决方案,只需覆盖每个翻译版本即可。对于我的情况,我在 values/strings.xml 和 values-en/strings.xml 中有相同的资源 ID,用于英语语言以显示我的覆盖文本,干杯。 (2认同)