2010-11-24 3 views
24

안드로이드 라이브러리 프로젝트를 만들려고했는데 빌드 프로세스가 제대로 작동하는 동안 프로젝트의 리소스를 대체하는 데 어려움이있었습니다. 라이브러리를 사용합니다. 내 라이브러리에서안드로이드 라이브러리 프로젝트에서 문자열 바꾸기 (또는 "오버라이드")

내가 가진 : 포함

  1. library_layout.xml

    < 텍스트 뷰
    안드로이드 : ID = "@ + ID/str_my_string"
    안드로이드 : layout_width = "wrap_content"
    android : layout_text = "wrap_content"
    >

  2. 호출하는 자바 파일

    ((텍스트 뷰) this.findViewById (R.id.str_my_string))의 setText (R.string.my_string).; 내가

    1. 자원이 라이브러리를 사용하여

      = > 자리 표시 자 <을 "my_string"

      < 문자열 이름을 포함

    2. 자원 strings.xml 프로젝트에서 >

    /문자열

    을 포함하는 strings.xml 6,

    < 문자열 이름 = "my_string"> 실제 문자열 내용 </문자열 >

내가 기대하는 행동은 그 내가 라이브러리를 사용하여 프로젝트를 실행할 때, 텍스트보기에는 실제 문자열 내용, 실제로는 거짓을 포함합니다.

라이브러리를 사용하는 응용 프로그램에 보면, 나는 두 R 파일을보고, 둘 다 R.string.my_string이 그 모두가 같은 숫자 값에 동일 할 .

답변

56

나는 동일한 배열을 가지고 있으며 예상대로 작동합니다.

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

이 주요 응용 프로그램은이 값을 가지고 라이브러리는 strings.xml의에서 기본값을 제공

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

:

라이브러리는 문자열 자원이 참조하여 레이아웃/클래스가 xml :

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

기본 응용 프로그램에서이 자원의 값을 가져온 경우 귀찮아.xml, 응용 프로그램이 실행될 때 "클라이언트 이후"를 볼 때, 기본 응용 프로그램 strings.xml에서 삭제하면 "Student Since"라는 라이브러리의 값이 표시됩니다. 리소스 ID가 응용 프로그램과 라이브러리 모두에 정의 된 경우

: 위의 링크에서 http://developer.android.com/tools/sdk/eclipse-adt.html

관련 인용 :

이 나의 여기에 독서에 따라 예상되는 동작 같은데 도구는 응용 프로그램에서 선언 된 리소스가 우선 순위를 갖도록하고 라이브러리 프로젝트의 리소스가 응용 프로그램 .apk로 컴파일되지 않도록합니다. 이를 통해 응용 프로그램은 모든 라이브러리에 정의 된 자원 동작 또는 값을 사용하거나 재정의 할 수있는 유연성을 제공합니다.

+0

그래서 Eclipse에서 문제가 발생하여 이전 cruft를 제거하지 못했던 것 같습니다. – jwriteclub

+5

정확히 일치하지만 문자열이 라이브러리에서 번역되면 실패합니다. lib의 번역 된 버전은 using-app 버전 (번역 된 것인지의 여부)을 덮어 씁니다. 그래서 배운 교훈 : 자리 표시 자 문자열을 번역하지 마십시오. –

+1

@ johand. 번역 된 문자열 리소스를 사용하는 라이브러리의 경우 프로젝트에서 재정의 할 방법이 있습니까? – Bruce