2011-10-15 4 views
10

비슷한 응용 프로그램 세트가 있습니다. 공통 리소스와 코드를 추출하여 라이브러리 프로젝트에 적용하고 애플리케이션은 필요한 것을 재정의합니다.Android 라이브러리 프로젝트에 정의 된 스타일 속성을 재정의 (또는 숨기기)하는 방법은 무엇입니까?

<style name="ListItemText"> 
    <item name="android:layout_toRightOf">@id/preview_image</item> 
    <item name="android:textStyle">bold</item> 
    <item name="android:textSize">@dimen/previewTextSize</item> 
</style> 

당신이 볼 수 있듯이이 포함 android:layout_toRightOf이 스타일과 같은 속성이 있다는 점에서 이미지의 오른쪽에 표시해야 ListView에 행의 텍스트에 적용 할 것이다 : 내 라이브러리에서 정의 된 다음 스타일이있다 열.
그러나 내 응용 프로그램 중 하나에서 이미지 아래에 텍스트를 표시하고 싶습니다. 해당 응용 프로그램에서 ListItemText 스타일을 정의하여 android:layout_toRightOf 속성 값을 대체하고이를 android:layout_below으로 바꾸려면 어떻게해야합니까?

내가로 정의하는 경우 :

<style name="ListItemText"> 
    <item name="android:layout_below">@id/preview_image</item> 
</style> 

효과적으로 모두 라이브러리와 응용 프로그램 스타일 XMLS의 속성을 합산, 오른쪽과 이미지 아래에 텍스트를 표시합니다.

p.s .: 가능한 한 내 문제의 해결책은 스타일에서 android:layout_toRightOf을 제거하고 레이아웃 xml로 옮기는 것입니다. 그런 다음 대상 응용 프로그램에서이 레이아웃을 다시 정의하거나 재정의 할 수 있습니다. 하지만 스타일 기반 솔루션을 찾고 있는데, 간단하고 직접적인 속성 재정의 방법을 제공 할 수 있기 때문입니다.
(나는 또한 parent 속성을 가진 상속 된 스타일을 사용할 수 있습니다. 그러나이 경우에도 응용 프로그램에서 레이아웃 재 지정이 필요하므로 피하려고합니다).

+0

나는 비슷한 것을하고 있습니다 !!! http://stackoverflow.com/questions/17103894/overriding-referenced-style-attributes – toobsco42

답변

6

android:layout_toRightOf을 사용하지 않으려면 @null으로 설정할 수 있습니다. 앱이 다음과 같이 ListItemText 스타일을 정의하면 원하는대로 작동해야합니다.

<style name="ListItemText"> 
    <item name="android:layout_toRightOf">@null</item> 
    <item name="android:layout_below">@id/preview_image</item> 
</style> 
+0

의도대로 작동합니다. 감사합니다. 이'@ null' 참조가 문서의 어딘가에 지정되어 있습니까? – Idolon

+1

내가 아는 한 확실한 곳은 아니지만 예를 들면 다음과 같습니다. http://developer.android.com/resources/articles/window-bg-speed.html –

0

"parent"를 사용하여 특수 스타일 (http://developer.android.com/guide/topics/ui/themes.html 참조)을 유도 할 수 있지만 스타일을 사용하여 이와 같은 레이아웃을 정의하는 것은이 문제를 해결하는 방법으로 나를 공격하지 않습니다. 레이아웃 파일에 레이아웃 정보를 남겨 두는 것이 좋습니다.

+0

예, "부모"에 대해 알고 있습니다. 하지만 레이아웃이 라이브러리 내부에서 정의되고 ListItemText 스타일을 참조하기 때문에 내 경우에는 도움이되지 않습니다. 물론 응용 프로그램에서 스타일을 재정의 할 수 있지만 (내 p.s 참조) 스타일 기반 솔루션이 가능한지 여부를 알고 싶습니다. – Idolon