以编程方式获取主题颜色

时间:2010-07-30 20:54:35

标签: android

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

现在,无论如何,盒子都以黄色绘制,但我认为如果颜色与系统的按钮按下颜色相匹配会更好看,例如Droid为橙色,Evo为绿色,蓝色为Galaxy S。

我查看了一下API,但找不到如何以编程方式获取该颜色。 有什么想法吗?

3 个答案:

答案 0 :(得分:8)

您可以从Android的themes.xmlstyles.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补丁文件。问题是那些是pngs。颜色内置于图像文件中,不会在任何地方定义。正如您已经注意到这些图像可以被替换并且外观会发生变化。

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

答案 1 :(得分:8)

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

例如;

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

答案 2 :(得分:1)

点击此链接:Using Platform Styles and Themes

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

  • 使用ImageButton代替子类化。
  • 将平台样式添加到按钮。