android – 以编程方式获取主题颜色

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

现在,无论是什么,框都是黄色绘制的,但是如果颜色与系统的按钮按下的颜色相匹配,如Droid的橙色,Evo的绿色或Galaxy S的蓝色,则会看起来好多了.

我稍微看了一下API,但是找不到如何以编程方式使用该颜色.
有任何想法吗?

最佳答案
您可以从Androidthemes.xml,styles.xmlcolors.xml中查看源代码.从colors.xml注意到的一点是定义了很多颜色.这是因为大多数小部件都是通过9补丁文件完成的.

按钮样式:

 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.颜色内置到图像文件中,并且不在任何位置定义.当你注意到这些图像可以被替换,并且外观变化.

不幸的是,你想要的是不可能的.你将要选择一种颜色去搭配.应该选择这种颜色以适应您的其余应用程序.对不起:(

转载注明原文:android – 以编程方式获取主题颜色 - 代码日志