2011-08-29 31 views
23

tôi là một sử dụng một thành phần dòng chảy nhìn vào dự án của tôi, cho phép người dev để ghi đè lên một số thuộc tính, như thế:Có thể thêm thuộc tính tùy chỉnh vào một kiểu trong tài nguyên Android không?

<org.taptwo.android.widget.TitleFlowIndicator 
    ... 
    app:footerTriangleHeight="0dip" 
    ... /> 

Tôi tái sử dụng thành phần này thành nhiều bố trí, và tôi muốn đặt các thuộc tính thành một kiểu. Nhưng khi tôi làm điều này, trình phân tích cú pháp nói Error: No resource found that matches the given name: attr 'app:footerTriangleHeight', ngay cả khi tôi thêm không gian tên trong tệp kiểu.

Có cách nào để thực hiện điều đó trong Android không?

Cảm ơn.

+0

chọn câu trả lời là sai/không đầy đủ. Bạn có thể tạo kiểu cho các phần tử giao diện người dùng tùy chỉnh trong tệp kiểu, tự mình thực hiện ... Xem câu trả lời của tôi ví dụ – Kurru

Trả lời

39

Ứng dụng Android

Nếu bạn không sử dụng Android Libraries, sau đó đây là những gì bạn có thể làm:

  1. Xác định thuộc tính tùy chỉnh styleable (tôi đoán bạn đã làm điều đó).
  2. Không sử dụng tiền tố không gian tên của bạn trong các mục kiểu (không gian tên mặc định cho không gian tên của ứng dụng hiện tại).

Ví dụ:

Trong attrs.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="testAttr" format="string"/>   
</resources> 

Trong styles.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources>   
    <style name="TestStyle" > 
     <item name="testAttr">asdf</item> 
    </style>   
</resources> 

Thư viện Android

Nếu thuộc tính tùy chỉnh đến từ Thư viện Android, bạn vẫn có thể sử dụng phương pháp được mô tả. Về mặt lý thuyết nó nên hoạt động, vì không gian tên của Thư viện Android giống như của ứng dụng (từ quan điểm công cụ aapt trong khi xây dựng). Nhưng tôi chưa tự mình thử nghiệm điều này.


Nếu bạn chỉ định không gian tên, nó sẽ hiển thị lỗi. Theo tôi biết, các kiểu không hỗ trợ không gian tên xml. Vì vậy, đây sẽ thất bại:

Trong styles.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:app="http://schemas.android.com/apk/res/app.package.name">   
    <style name="TestStyle" > 
     <item name="app:testAttr">asdf</item> 
    </style>   
</resources> 

Parser tự động mặc định là namespace AndroidManifest ứng dụng hiện tại, mặc dù bạn không thể xác định không gian tên này một cách rõ ràng.

+2

Bạn nói đúng, tôi chỉ cần loại bỏ không gian tên trong tệp kiểu và nó hoạt động.Nhưng nó là lạ rằng nó là cần thiết trong một tập tin bố trí bình thường, và không phải trong một tập tin tài nguyên. Cảm ơn. –

+0

Điều này làm việc với tiện ích CardView mới chẳng hạn: chỉ cần loại bỏ vùng tên và một mục kiểu như 16dp biên dịch và chạy tốt. – personne3000

6

Bạn có thể xác định kiểu về không gian tên của bạn, tôi đã sử dụng nó bản thân mình

tức là

<style name="whatever"> 
    <item name="YourPackage.YourSubPackage:parametername">@drawable_or_anything/bla</item> 
</style> 
+0

Đối với văn bản trước: sử dụng bất kỳ không gian tên nào được xác định trong tệp kê khai của bạn là "gói" – Kurru

+1

Điều này không có tác dụng đối với tôi. Thuộc tính kiểu tùy chỉnh của tôi là một enum. –

+0

Bạn đã cố gắng định lượng đầy đủ enum cũng như thuộc tính? – Kurru

Các vấn đề liên quan