修正:“Android:检测焦点/按下的颜色”

我试图检测button和其他元素的焦点/按下的颜色。 这是需要的,因为我正在开发新组件,重要的是那些看起来是平台的一部分。 这些颜色是android sdk上的ORANGE和HTC SenseUI上的绿色。 如果我能检测到这种颜色,我的组件将在这两个版本上看起来都是平台的一部分。

有谁知道如何做到这一点?


可以创build“select器”,使用默认状态的自定义图像和平台默认的焦点/select。

要做到这一点,请按照下列步骤: 1)在“res / drawable”(例如“red_button.xml”)中用select器创buildxml文件:

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@android:drawable/btn_default" > </item> <item android:state_focused="true" android:drawable="@android:drawable/btn_default" > </item> <item android:drawable="@drawable/btn_default_red" > </item> </selector> 

2)从文件夹“… / android-sdk-mac / platforms / android-1.5 / data / res / drawable /”拍照“btn_default_pressed.9.png”并根据需要更改颜色(我需要将其更改为红色和这个GIMP就足够了)。

3)在“res / drawable”中放置修改后的图片(例如名称为“btn_default_red.9.png”)

4)定义button:

 <Button android:id="@+id/info_button" android:layout_width="wrap_content" android:layout_height="37dip" android:layout_marginTop="1dip" android:background="@drawable/red_button" android:text="[Info]" /> 

就这样。

这是结果: 替代文字http://img200.imageshack.us/img200/1349/custombutton.png

Solutions Collecting From Web of "修正:“Android:检测焦点/按下的颜色”"

我也有这个问题。 如前所述,问题在于背景不是简单的颜色,而是可以呈现各种外观的Drawable。 不过,我find了解决办法,可能有所帮助。 如果您的自定义组件看起来像现有的组件,例如Button或ListView条目,则可以窃取其背景/select器并将其设置为自定义组件的背景。 例如,在您的自定义组件构造函数中:

  setBackgroundDrawable(new Button(context).getBackground()); 

或者更适合列表式组件的背景:

  setBackgroundDrawable(new ListView(context).getSelector()); 

你可能想在某种程度上优化这个代码,但你明白了。

那些不是颜色。 它们是一个StateListDrawable中的几个九块图像。 我怀疑是否有一种可靠的方法来确定颜色,可以在所有设备和所有版本的Android上使用。

这几乎是Android ListViewselect器颜色的重复

另外,为什么你需要检测颜色? 什么也不做,你的小部件将适合平台的现有外观和感觉。

或者,如果你正在编写一个自定义主题,只需让你的android:Themeinheritance。