33

私は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">Placeholder</string>
    

私が持っているライブラリを使用するプロジェクトでは

  1. strings.xmlを含むリソース

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

私が期待する動作は、ライブラリを使用してプロジェクトを実行すると、テキストビューに実際の文字列コンテンツが表示されますが、実際にはfalseが含まれていることです。

ライブラリを使用するアプリを見ると、2つのRファイルがあり、両方R.string.my_stringとも同じ数値になっています。

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でこのリソースの値を指定すると、アプリの実行時に「Client since」が表示され、メインアプリstrings.xmlから削除すると、ライブラリ「StudentSince」から値が表示されます。 "。

ここでの私の読書に基づくと、これは予想される動作のようです: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.xmlsw600dp

于 2020-06-16T13:51:00.037 に答える