2011-10-15 16 views
10

Tôi có một bộ ứng dụng tương tự. Tôi trích xuất các tài nguyên và mã chung cho dự án thư viện và các ứng dụng chỉ ghi đè những gì họ cần. Trong thư viện của tôi có phong cách sau đây định nghĩa:Làm cách nào để ghi đè (hoặc ẩn) các thuộc tính kiểu được xác định trong dự án thư viện 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> 

Như bạn có thể nhìn thấy nó chứa android:layout_toRightOf thuộc tính như phong cách này sẽ được áp dụng cho các văn bản ở hàng ListView mà sẽ được hiển thị ở bên phải của hình ảnh trong đó hàng.
Tuy nhiên, trong một trong các ứng dụng của tôi, tôi muốn hiển thị văn bản bên dưới hình ảnh. Cách thức ListItemText trong ứng dụng đó phải được xác định để ghi đè android:layout_toRightOf giá trị thuộc tính và thay thế bằng android:layout_below?

Nếu tôi xác định nó như:

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

nó sẽ hiển thị văn bản bên phải và bên dưới hình ảnh, hiệu quả tổng hợp các thuộc tính của cả hai thư viện và phong cách ứng dụng XMLs.

p.s .: Một giải pháp có thể có trong vấn đề của tôi là loại bỏ android:layout_toRightOf trong các kiểu và di chuyển nó đến bố cục xml thay thế. Sau đó, trong ứng dụng đích, bố cục này có thể được định nghĩa lại/ghi đè. Nhưng tôi đang tìm kiếm giải pháp dựa trên phong cách, vì nó có thể cung cấp cách ghi đè thuộc tính đơn giản và dễ hiểu hơn.
(Tôi cũng có thể sử dụng kiểu được kế thừa với thuộc tính parent, nhưng điều này một lần nữa sẽ yêu cầu bố cục ghi đè trong ứng dụng mà tôi cố gắng tránh).

+0

Tôi đang làm điều gì đó tương tự TẠI ĐÂY !!! http://stackoverflow.com/questions/17103894/overriding-referenced-style-attributes – toobsco42

Trả lời

6

Để tắt android:layout_toRightOf, bạn có thể đặt thành @null. Nếu ứng dụng của bạn xác định kiểu dáng ListItemText như sau, nó sẽ hoạt động như bạn muốn:

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

Hoạt động như dự định, cảm ơn. Đây có phải là tham chiếu '@ null' được chỉ định ở đâu đó trong tài liệu không? – Idolon

+1

Không ở bất kỳ nơi nào rõ ràng như tôi biết, nhưng nó được đề cập, như ở đây ví dụ: http://developer.android.com/resources/articles/window-bg-speed.html –

0

Bạn có thể sử dụng "cha mẹ" để lấy được phong cách chuyên biệt (xem http://developer.android.com/guide/topics/ui/themes.html) nhưng xác định bố cục như thế này với kiểu không đánh tôi như là cách khắc phục sự cố này. It's ok để lại một số thông tin bố trí trong các tập tin bố trí.

+0

Vâng, tôi biết về "cha mẹ". Nhưng nó sẽ không giúp ích gì trong trường hợp của tôi vì layout được định nghĩa bên trong thư viện và nó tham chiếu đến kiểu 'ListItemText'. Tôi có thể xác định lại phong cách trong ứng dụng của khóa học (xem ps.s.) của tôi, nhưng muốn biết liệu giải pháp dựa trên phong cách là có thể. – Idolon