2010-10-18 19 views
27

Khi tôi nhìn vào misc. Các hướng dẫn và ví dụ về Android khi nói đến việc chỉ định màu sắc tôi thường thấy các hằng số như @color/red hoặc @color/black v.v ... đang được sử dụng. Vì một lý do kì lạ nào đó KHÔNG BAO GIỜ làm việc cho tôi! Tôi luôn cần chỉ định màu bằng ký hiệu "#RGB", #ARGB, ..., #AARRGGBB.Tệp .xml của Android: Tại sao các màu được xác định trước không hoạt động đối với tôi?

Ngay sau khi tôi cố gắng sử dụng bất kỳ hằng số ghi nhớ nào như ví dụ: "@ color/red" Tôi nhận được thông báo lỗi như sau:

[...] C:\Users\mmo\Test\res\drawable\edit_text.xml:5: error: Error: No resource found that matches the given name (at 'drawable' with value '@color/orange'). 
[...] C:\Users\mmo\Test\res\drawable\myDrawable.xml:3: error: Error: No resource found that matches the given name (at 'drawable' with value '@color/black'). 
[...] C:\Users\mmo\Test\res\drawable\myDrawable.xml:4: error: Error: No resource found that matches the given name (at 'drawable' with value '@color/black'). 
[...] C:\Users\mmo\Test\res\drawable\myDrawable.xml:5: error: Error: No resource found that matches the given name (at 'drawable' with value '@color/green'). 
[...] C:\Users\mmo\Test\res\drawable\myDrawable.xml:6: error: Error: No resource found that matches the given name (at 'drawable' with value '@color/black'). 

Tại sao vậy? Tại sao tôi không thể sử dụng các hằng số được xác định trước này? Tôi có cần phải thêm tiền tố cho họ với một số tên gói (tôi đã thử @android:color/red nhưng chỉ gây ra một lỗi khác)? Tôi có cần phải tự xác định những màu này không? Nếu vậy: làm thế nào và ở đâu? Bất kỳ ý tưởng hoặc đề xuất nào?

Michael

Trả lời

23

Có phải "colors.xml" được thêm vào thư mục res/values ​​của bạn nơi các hằng số màu này được xác định không?

+5

Tôi đã tạo một tệp như vậy trong ứng dụng của mình ngay bây giờ và đã xác định một loạt màu mặc định tại đó và bây giờ tôi thực sự có thể sử dụng các màu được đặt tên như vậy. Rõ ràng tất cả những ví dụ tôi đã thấy giả định sự tồn tại của một tập tin như vậy mà không bao giờ nói rõ điều đó. Vì vậy, tôi đã sai lầm đã đi đến kết luận rằng những giá trị này được xác định trước. – mmo

+0

Xem http://stackoverflow.com/a/3964048/632951 quá – Pacerier

58

Nếu bạn muốn sử dụng màu được xác định trước trong nền tảng Android, cú pháp là @android: color/white. "Android:" ở đầu cho biết rằng tài nguyên không phải là một phần của ứng dụng của bạn.

+2

Không, như tôi đã viết ở trên: điều đó không hiệu quả - ít nhất là không cho tôi. Có bất kỳ thiết lập đặc biệt hoặc "nhập khẩu" (hoặc bất cứ điều gì) cần thiết để làm cho điều này làm việc? – mmo

+13

Trên thực tế, tôi chỉ phải học, rằng DOES này hoạt động, nhưng dường như chỉ có "màu sắc" @android: color/white và @android: color/black được định nghĩa. Tất cả những người khác tôi đã thử (như @android: màu/đỏ, @android: màu/xanh lá cây, @android: màu/xanh dương, v.v.) mang lại lỗi. Rất kỳ quặc! – mmo

+1

Nó chỉ là kỳ lạ nếu bạn mong đợi những màu sắc được xác định bởi nền tảng, họ không. Thông thường, nếu bạn thấy một ứng dụng mẫu có màu @/điều đó có nghĩa là màu sắc đã được xác định trong chính ứng dụng đó. –

4

Đảm bảo tệp XML màu của bạn nằm trong thư mục giá trị, không phải là màu sắc thư mục.

Vì vậy, bạn nên có ...

giá trị /colors.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <color name="red">#FF0000</color> 
</resources> 

và NOT này ...

màu /colors.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <color name="red">#FF0000</color> 
</selector> 

Lưu ý rằng thẻ là nguồn, không selector.

6

Tệp XML màu nằm trong thư mục giá trị trong đó tệp phải chứa giá trị màu. Trong thẻ tài nguyên.

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
<color name="green">#00ff00</color> 

+0

phải là # 00ff00 John

+0

Không cần khai báo không gian tên 'xmlns' khiến tệp tài nguyên android không cần tiền tố 'android:'. – Flawyte

0

Một phần quan trọng của việc này mà không ai khác đã đề cập là các tham chiếu đến các màu sắc có được

@color/black 

nhưng file xml có được

colors.xml 

(lưu ý số nhiều trong tên tệp xml nhưng không phải là số nhiều @color)

+4

- 1, ** Không ** tên tệp có thể là bất kỳ thứ gì. Điều quan trọng là tên thẻ phải là 'màu', ví dụ: ' # 00ff00' – Pacerier

3

Kỳ lạ Android không cung cấp danh sách màu sắc phong nha.Và tôi nói kỳ lạ bởi vì trong suốt 30 năm sự nghiệp của tôi, đây là ngôn ngữ đầu tiên tôi gặp mà không làm điều đó. Và mặc dù điều đó được xây dựng trên Java, nó xác định màu sắc trong tất cả các thư viện cơ bản của nó.

Những cái được xác định là tiền tố, vì vậy bạn sẽ không tìm thấy chúng :) Để tìm chúng (nếu sử dụng nhật thực), hãy truy cập tài liệu xml nơi bạn cần màu loại android: background = "@ android: color/và làm một Space Ctrl Mở phiên bản của tôi (hiện tại như chúng ta nói) tôi nhận được hơn một chục ví dụ:.. holo_orange_dark

vì vậy, sử dụng hoặc khiếu nại để Google sửa chữa vấn đề này và tôi gọi nó là vấn đề bởi vì. nó không có ý nghĩa gì để buộc tất cả các nhà phát triển phải mô tả tất cả các màu sắc và giá trị theo cách thủ công

+0

"đây là ngôn ngữ đầu tiên tôi gặp mà không làm điều đó" - bạn gọi "ngôn ngữ" là gì? –

+0

Tôi đồng ý. Đây là môi trường đầu tiên tôi đã làm việc trong đó không có màu sắc được xác định trước nhưng không xác định màu đen/trắng/minh bạch. Điều này là lạ, tôi đồng ý, nhưng dường như đúng. Đây là lý do tại sao nó là khó hiểu với những người đã được khoảng một thời gian dài. Để làm cho nó tồi tệ hơn, không có mô tả thực sự tốt tôi có thể tìm thấy trong các tài liệu chính thức. Bạn chỉ cần google xung quanh. Kỳ dị. – Mitch

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