以编程方式获取主题颜色

我正在使用一个应用程序,它使用子类ImageView来显示一个边界框的一部分的图像。

现在这个盒子是用黄色绘制的,不过我觉得如果颜色与系统的button颜色相匹配,比如Droid的橙色,Evo的绿色,Galaxy S的蓝色,看起来好多了。

我环顾了一下API,但是找不到如何以编程的方式抓住那个颜色。 有任何想法吗?

Solutions Collecting From Web of "以编程方式获取主题颜色"

您可以从android的themes.xmlstyles.xmlcolors.xml查看源代码。 您从colors.xml中注意到的一点是,没有定义太多的颜色。 这是因为大部分小部件都是通过9个补丁文件完成的。

button样式:

  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> 

所有改变背景色的工作都在btn_default Drawable

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> 

其中每一个都是一个9补丁文件。 问题是那些是png。 颜色被内置到图像文件中,并且不在任何地方定义。 正如你已经注意到,这些图像可以被replace,外观也会改变。

不幸的是,你想要的是不可能的。 你将不得不select一种颜色。 这种颜色可能应该select适合您的应用程序的其余部分。 对不起:(

从Android ICE_CREAM_SANDWICH(API 14),你有android.R.color中的主题颜色。*

例如;

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

选中此链接: 使用平台样式和主题

我不知道在这种情况下子类化是否是最好的。 我会尝试:

  • 使用ImageButton而不是子类。
  • 将平台样式添加到button。