2010-11-24 57 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