33

I've been trying to make an android library project, and while the build process works fine, I've been running into some trouble with replacing a resource in the project which uses the library.

In my library I have:

  1. A library_layout.xml containing

    <TextView  
        android:id="@+id/str_my_string"  
        android:layout_width="wrap_content"  
        android:layout_text="wrap_content">
    
  2. A java file which calls

    ((TextView)this.findViewById(R.id.str_my_string)).setText(R.string.my_string);
    
  3. A resource strings.xml containing

    <string name="my_string">Placeholder</string>
    

In the project using the library I have

  1. A resource strings.xml containing

    <string name="my_string">Actual string content</string>
    

The behavior I expect is that when I run the project using the library, the text view displays Actual string content, but it actually contains false.

Looking in the app which uses the library, I do see two R files, and both of them have R.string.my_string and both of those are equal to the same numeric value.

4

2 回答 2

69

我有同样的安排,这对我来说符合预期。

该库具有对字符串资源的此引用的布局/类:

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

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

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

主应用在它的 strings.xml 中有这个值:

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

当我在主应用程序 strings.xml 中为该资源指定值时,我在应用程序运行时看到“客户端以来”,当我从主应用程序 strings.xml 中删除它时,我看到库中的值,“学生以来”。

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

来自上面链接的相关引用:

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

于 2010-12-08T01:56:31.903 回答
0

刚刚遇到这个错误,这就是我的情况:

如果您strings.xml在库中针对不同屏幕尺寸使用多个文件,您的应用可能会使用库文件。

IE,如果你有:

LIBRARY :  
    res/values/strings.xml  
    res/values-sw600dp/strings.xml

和 :

APP :
    res/values/strings.xml

并且您尝试在 600dp 屏幕尺寸(即平板电脑)上启动您的应用程序,您的应用程序strings.xml(sw600dp)将从您的中获取。
为避免这种情况,您可能希望在您的应用程序strings.xml中创建一个特定的sw600dp分辨率,其中包含与您的库中相同的字符串值。

于 2020-06-16T13:51:00.037 回答