2010-07-30 40 views
15

我正在制作一个应用程序,该应用程序使用子类别ImageView来显示带有边框的图像而不是其中的一部分。以编程方式获取主题颜色

现在盒子被绘制成黄色,不管怎么样,但我认为如果颜色与系统按钮按下的颜色相匹配,比如Droid橙色,Evo绿色或蓝色Galaxy S

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

+0

这是一个很好的问题,我害怕没有解决方法,真的很伤心 – mad 2011-01-02 18:48:53

+0

这个问题已经问了5年了......当前的答案现在位于这里:http://stackoverflow.com/questions/12375766/how-to-get-background-颜色从当前主题编程方式(第一个答案肯定有效......) – pbarranis 2016-02-12 17:17:06

回答

7

你可以看一下从Android的themes.xmlstyles.xml,并且colors.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_defaultDrawable完成。

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。颜色被嵌入到图像文件中,并且不在任何地方定义。正如您已经注意到,这些图像可以被替换,外观也会改变。

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

+0

那真是令人沮丧。不过谢谢。 – infinitypanda 2010-08-03 16:23:43

1

检查此链接:Using Platform Styles and Themes

我不知道,如果子类是在这种情况下,做的最好的事情。 我会尝试:

  • 使用ImageButton而不是子类。
  • 将平台样式添加到按钮。
+2

我读过,但它没有帮助。它告诉我如何设置主题,但我想获得主题。 ImageButton并不是我要找的,对不起。图片不需要点击,我只想使用与按钮相同的颜色。 – infinitypanda 2010-07-30 22:04:41

7

于Android ICE_CREAM_SANDWICH(API 14),你必须在android.R.color主题颜色*

例如;

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

在我有限的理解中,android.R.color提供的一些东西是静态颜色,而不是应用程序主题(可在运行时变化)的可变颜色。这样做的答案在这里:http://stackoverflow.com/questions/12375766/how-to-get-background-color-from-current-theme-programmatically – pbarranis 2016-02-12 17:16:25

相关问题