2012-02-02 32 views
15

Tôi có màu nhấn mà tôi sử dụng qua bố cục của mình. Tôi có nó được định nghĩa là một phong cách mà tôi áp dụng cho một TextView.Đặt màu dựa trên chủ đề

Ứng dụng của tôi cho phép người dùng lựa chọn giữa chủ đề tối và chủ đề sáng. Tôi muốn tinh chỉnh màu nhấn dựa trên chủ đề đã chọn.

  • Bạn không thể định nghĩa một màu sắc trong một chủ đề
  • Bạn có thể không xác định một màu danh sách nhà nước dựa trên chủ đề
  • Bạn không thể nguồn lực riêng biệt dựa trên chủ đề (như bạn có thể cho phiên bản hoặc kích thước màn hình)
  • Bạn không thể cập nhật màu nguồn từ mã (??? không phải là 100% trên ??? này)

Làm thế nào tôi nên kiểm soát màu giọng của tôi dựa trên các chủ đề được lựa chọn?

Hướng dẫn dev cung cấp ví dụ về chủ đề bằng màu tùy chỉnh, gần với thứ tôi muốn. Tôi cần để có thể thay đổi màu sắc trong thời gian chạy. Tôi biết tôi có thể đi vào mã của tôi và X nơi mà phong cách này đang được sử dụng Tôi có thể ferrit ra các thành phần và thiết lập màu sắc theo cách đó. Nhưng tôi nghĩ tôi có thể làm được điều này với sự kết hợp giữa phong cách/chủ đề.

Cảm ơn

Trả lời

0

Cách tôi giải quyết vấn đề này là tạo các lớp con của android.widget.TextView. Tôi đã tạo ra một TextViewAccented và một TextViewWarning. Tôi sử dụng các TextView này trong XML của tôi, nơi tôi muốn màu nhấn hoặc màu cảnh báo. Tôi xóa mọi tham chiếu màu khỏi XML.

Các lớp con chứa ba hàm tạo mặc định. Cả ba nhà xây dựng đều gọi một phương thức riêng gọi là setColor(). setColor() sau đó kiểm tra chủ đề đã chọn và có thể sử dụng bóng mong muốn dựa trên chủ đề hiện được chọn.

Đó là một cơ chế khá sạch sẽ, nhưng thật khó để tin rằng tôi không thể viết mã này trong một chủ đề. Điều đó có vẻ chính xác những gì một chủ đề nên được cho.

23

Tôi đã gặp khó khăn với cùng một câu hỏi và gần như làm điều gì đó tương tự như những gì bạn đã đưa ra nhưng may mắn tôi tìm thấy giải pháp sau đây mà tôi cũng đã nêu here.

Trước tiên, bạn xác định các lĩnh vực màu tùy chỉnh trong attr.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<attr name="titleColor" format="reference|color" /> 
<attr name="introColor" format="reference|color" /> 

</resources> 

Tiếp theo bạn xác định chủ đề của bạn

<style name="AppTheme.MyLight" parent="android:Theme"> 
    <item name="titleColor">#FFFFFF</item> 
    <item name="introColor">#FFFFAA</item> 
</style> 


<style name="AppTheme.MyDark" parent="android:Theme"> 
    <item name="titleColor">#000000</item> 
    <item name="introColor">#004444</item> 
</style> 

và cuối cùng trong cách bố trí của bạn

<TextView 
    android:id="@+id/quoteTitle" 
    android:textColor="?titleColor" 
    ... 
</TextView> 

<TextView 
    android:id="@+id/quoteIntro" 
    android:textColor="?introColor" 
    ... 
</TextView> 

Có vẻ là không có giải thích trong tài liệu chính thức của android về việc sử dụng các thuộc tính. Tài nguyên tốt nhất tôi tìm thấy là here.

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