2010-07-30 33 views
15

Tôi đang làm việc trên một ứng dụng ngay bây giờ sử dụng phân lớp ImageView để hiển thị hình ảnh có hộp giới hạn trên một phần của nó.Lập trình có màu chủ đề

Ngay bây giờ hộp được tô màu vàng bất kể cái gì, nhưng tôi nghĩ nó sẽ trông đẹp hơn nhiều nếu màu khớp với nút nhấn của hệ thống, chẳng hạn như màu cam cho Droid, màu xanh lá cây cho Evo, hoặc màu xanh cho Galaxy S.

Tôi đã xem xét các API một chút, nhưng không thể tìm thấy cách lập trình để tô màu đó. Bất kỳ ý tưởng nào?

+0

đây là một câu hỏi hay và tôi – mad

+0

Đã 5 năm kể từ khi câu hỏi này được hỏi ... câu trả lời hiện tại được đặt tại đây: http://stackoverflow.com/questions/12375766/how-to-get-background- color-from-current-theme-programmatically (câu trả lời đầu tiên chắc chắn hoạt động ...) – pbarranis

Trả lời

7

Bạn có thể xem nguồn từ android themes.xml, styles.xmlcolors.xml. Một điều bạn nhận thấy từ tệp colors.xml là không có nhiều màu được xác định. Điều này là bởi vì hầu hết các widget được thực hiện thông qua các tập tin 9-patch.

nút phong cách:

223  <style name="Widget.Button"> 
224   <item name="android:background">@android:drawable/btn_default</item> 
225   <item name="android:focusable">true</item> 
226   <item name="android:clickable">true</item> 
227   <item name="android:textAppearance">?android:attr/textAppearanceSmallInverse</item> 
228   <item name="android:textColor">@android:color/primary_text_light</item> 
229   <item name="android:gravity">center_vertical|center_horizontal</item> 
230  </style> 

Tất cả các công việc thực hiện để thay đổi màu nền được thực hiện trong btn_defaultDrawable.

Nguồn btn_default.xml:

17 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    18  <item android:state_window_focused="false" android:state_enabled="true" 
    19   android:drawable="@drawable/btn_default_normal" /> 
    20  <item android:state_window_focused="false" android:state_enabled="false" 
    21   android:drawable="@drawable/btn_default_normal_disable" /> 
    22  <item android:state_pressed="true" 
    23   android:drawable="@drawable/btn_default_pressed" /> 
    24  <item android:state_focused="true" android:state_enabled="true" 
    25   android:drawable="@drawable/btn_default_selected" /> 
    26  <item android:state_enabled="true" 
    27   android:drawable="@drawable/btn_default_normal" /> 
    28  <item android:state_focused="true" 
    29   android:drawable="@drawable/btn_default_normal_disable_focused" /> 
    30  <item 
    31   android:drawable="@drawable/btn_default_normal_disable" /> 
    32 </selector> 

Mỗi một trong những là một tập tin 9 vá. Vấn đề là những người đó là pngs. Các màu được tích hợp vào các tệp hình ảnh và không được định nghĩa ở bất kỳ đâu. Như bạn đã nhận thấy những hình ảnh này có thể được thay thế và thay đổi giao diện.

Thật không may, những gì bạn muốn là không thể. Bạn sẽ phải chọn một màu duy nhất để đi với. Màu này có lẽ nên được chọn để phù hợp với phần còn lại của ứng dụng của bạn. Xin lỗi :(

+0

Điều đó thật đáng buồn. Cảm ơn mặc dù. – infinitypanda

1

Kiểm tra liên kết này: Using Platform Styles and Themes

Tôi không biết nếu subclassing là điều tốt nhất để làm trong trường hợp này. Tôi sẽ thử:

  • Sử dụng ImageButton thay vì phân lớp phụ.
  • Thêm kiểu nền tảng vào nút.
+2

Tôi đọc điều đó, nhưng nó không hữu ích, nó cho tôi biết cách đặt chủ đề, nhưng tôi muốn lấy chủ đề. Và ImageButton không phải là những gì tôi đang tìm kiếm, xin lỗi. Hình ảnh không cần phải nhấp, tôi chỉ muốn sử dụng cùng một màu như nút. – infinitypanda

7

Từ Android ICE_CREAM_SANDWICH (API 14), bạn có màu sắc chủ đề trong android.R.color *

Ví dụ;.

myTextView.setTextColor(getResources().getColor(android.R.color.holo_red_light)); 
+1

Trong sự hiểu biết hạn chế của tôi, một cái gì đó có sẵn từ android.R.color là một màu tĩnh và không phải là một màu thay đổi từ Theme của ứng dụng (có thể thay đổi khi chạy). Câu trả lời cho việc đó là ở đây: http://stackoverflow.com/questions/12375766/how-to-get-background-color-from-current-theme-programmatically – pbarranis

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