2013-06-24 33 views
6

Tôi đang phát triển một ứng dụng sẽ có chủ đề với màu sắc và hình ảnh khác nhau cho các khách hàng khác nhau. Trong khi tôi có tùy chọn để ghi lại tệp colors.xml với các màu tùy chỉnh tại thời gian xây dựng, tôi nghiêng về việc thiết lập màu sắc khi chạy. Những gì tôi tự hỏi là nếu một số cách để thay đổi chương trình giá trị của một màu được định nghĩa trong tệp colors.xml và có giá trị mới có hiệu lực trong TẤT CẢ những nơi mà nó được sử dụng trong định nghĩa bố trí.Làm cách nào tôi có thể thay đổi giá trị của một màu trong lập trình color.xml?

Vì vậy, nói cách khác nếu tôi có:

<?xml version="1.0" encoding="UTF-8"?> 
<resources> 
    <color headerColor="white">#FFF</color> 
    <color backgroundColor="black">#000</color> 
</resources> 

Và một file bố trí với một cái gì đó như:

<TextView 
     android:id="@+id/listItemHeaderActivity" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="12sp" 
     android:textColor="@color/headerColor" 
     android:background="@color/backgroundColor" 
     android:text="@string/listTextHeaderActivity"/> 

Tôi có thể thay đổi giá trị của headercolorbackgroundColor trong Java và có nó diễn ra trong tất cả các Chế độ xem sử dụng các giá trị đó? Hoặc tôi có phải thay đổi từng màu Chế độ xem có liên quan một cách riêng lẻ bất cứ khi nào tôi hiển thị các chế độ xem đó không?

Xin cảm ơn trước.

+1

bạn đã thử làm gì? – koem

+0

Tại thời điểm này, tôi đã không thực sự cố gắng bất cứ điều gì khác hơn là xác định một số xác định một số giá trị màu mặc định và sử dụng chúng trong các tập tin bố trí của tôi, như bạn thấy ở trên. Tôi đã không thể tìm thấy một cách để làm điều đó như tôi đã mô tả trong câu hỏi của tôi, vì vậy tôi đã không thử bất cứ điều gì như thế nào được nêu ra. – RocketGuy3

+1

Không, bạn không thể thay đổi. Bạn có thể sử dụng sharedpreferences để lưu màu và sử dụng chúng. – Tarun

Trả lời

1

Sẽ giúp ích nếu bạn mô tả lý do và cách bạn sử dụng màu động này và tại sao bạn muốn thực hiện điều này trong thời gian chạy thay vì thời gian tạo. Nhưng giả sử nó phải là cách bạn yêu cầu ...

Tôi đề nghị viết một hàm trợ giúp mà tất cả các địa điểm có thể gọi và đặt chúng.

public int getMyColor(...) { 
    // figure out which color to use, via a database call, 
    // an asset load, some algorithm, or whatever you need 
    ... 

    // once color chosen, create an RGBA integer for it 
    final int myColor = ... 

    return myColor; 
} 

Bây giờ gọi điều này trên mọi hoạt động/đoạn cần và đặt thuộc tính màu trên các chế độ xem thích hợp nếu cần. (Với View.setBackgroundColor(...), vv)

Tuy nhiên, để cho phép điều này hoạt động trong cài đặt XML và/hoặc xem trước bố cục phát triển, bạn sẽ phải viết một lớp xem tùy chỉnh để gọi hàm trợ giúp đó. Tùy thuộc vào nơi và cách bạn sẽ sử dụng màu này, nó có thể không đáng giá.

Giải pháp này không phải là rất thanh lịch và đòi hỏi rất nhiều gọi chức năng trợ giúp getMyColor tùy chỉnh này trong mọi hoạt động/phân đoạn cần nó. Nếu nó chỉ được thiết lập một hoặc hai nơi mặc dù, nó có lẽ không phải là một việc lớn. Một lần nữa, khi biết lý do tại sao bạn muốn thực hiện việc này thay vì yêu cầu chúng tôi làm cách nào để thực hiện điều đó, có thể mang lại một giải pháp thay thế tốt hơn cho bạn.

Ví dụ: đây không phải là câu trả lời cho câu hỏi của bạn — nhưng bạn có nghĩ về chủ đề không? Nó vẫn sẽ có vấn đề phải đặt chúng vào thời gian xây dựng, trừ khi bạn muốn tất cả những điều trên, nhưng tùy thuộc vào cách bạn đang sử dụng màu này, nó có thể là tốt hơn so với mess tôi nêu ở trên.

+0

Nhóm của chúng tôi quyết định chúng tôi không muốn làm điều đó vào thời gian xây dựng bởi vì họ không thích kịch bản hơi lộn xộn cần thiết để sao chép các giá trị màu trong tệp colors.xml. Ngoài ra, chúng tôi muốn cấu hình được xây dựng độc lập nhất có thể để điều duy nhất chúng tôi cần cung cấp là tệp cài đặt người bán. – RocketGuy3

+1

Bạn có thể xử lý phần lớn ứng dụng dưới dạng thư viện được chia sẻ, sau đó có từng cá thể người bán của ứng dụng 'thực sự' ghi đè tệp colors.xml. Xem http://developer.android.com/tools/projects/index.html#LibraryProjects để biết thêm thông tin. Điều đó sẽ đòi hỏi nhiều hơn 'một tệp cài đặt người bán', nhưng sẽ giải quyết được vấn đề và là giải pháp 'được hỗ trợ' cho mỗi thiết kế Android SDK. –

0

Tôi đã làm một điều gì đó tương tự như những gì tôi nghĩ Jon có thể mô tả. Tôi tạo ra một lớp mở rộng Fragment (hoặc SherlockFragment trong trường hợp của tôi). Lớp đó có một phương thức mới được gọi là "setCustomColors", chỉ cần xem khung nhìn và tìm kiếm tất cả các con của nó cho một số kiểu xem nhất định cần được tùy chỉnh. Sau đó, tôi mở rộng lớp đó cho tất cả các Phân đoạn của tôi, và trong phương thức onCreateView, tôi gọi hàm này, đi qua khung nhìn đoạn hiện tại. Hãy cho tôi biết nếu giải thích đó là không rõ ràng (mặc dù có lẽ đây không phải là vấn đề mà nhiều người sẽ có).

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