web-dev-qa-db-ja.com

Androidライブラリプロジェクトの文字列を置換(または「オーバーライド」))

Androidライブラリプロジェクトを作成しようとしていますが、ビルドプロセスは正常に機能しますが、ライブラリを使用するプロジェクトのリソースを置き換える際に問題が発生しました。

私の図書館には次のものがあります。

  1. A 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が含まれていると予想される動作です。

ライブラリを使用するアプリを見ると、私doには2つのRファイルがあり、どちらにもR.string.my_stringそしてそれらの両方は同じ数値に等しい。

29
jwriteclub

私は同じ取り決めを持っており、これは期待どおりに機能します。

ライブラリには、文字列リソースへのこの参照を含むレイアウト/クラスがあります。

<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にコンパイルされないようにします。これにより、アプリケーションは、任意のライブラリで定義されているリソースの動作または値を使用または再定義する柔軟性が得られます。

61
R Miller