我正在尝试检测按钮和其他元素的焦点/按下颜色。这是必要的,因为我正在开发新的组件,重要的是这些组件看起来像平台的一部分。这些颜色在android sdk上是橙色的,在HTC SenseUI上是绿色的。如果我能检测到颜色,我的组件在两个版本上看起来都像是平台的一部分。
有人知道怎么做吗?
可以创建“选择器”,它使用自定义图像表示默认状态,使用平台默认值表示焦点/选择。
执行以下步骤: 1)在"res/drawable“(例如”red_button.xml“)中创建带有选择器的xml文件:
<?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
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]" />
就这样。
这是结果:alt text http://img200.imageshack.us/img200/1349/custombutton.png
发布于 2010-04-14 04:34:26
我也有这个问题。如前所述,问题是背景不是简单的颜色,它们是可以呈现各种外观的绘图。然而,我发现了一个可能有帮助的变通方法。如果您的自定义组件看起来与现有组件相似,例如按钮或ListView条目,您只需窃取它们的背景/选择器并将其设置为自定义组件的背景即可。例如,在您的自定义组件构造函数中:
setBackgroundDrawable(new Button(context).getBackground());
或者更适合于类似列表的组件的背景:
setBackgroundDrawable(new ListView(context).getSelector());
您可能希望在某种程度上优化该代码,但您已经明白了这一点。
发布于 2010-01-15 00:36:25
那些不是颜色。它们是StateListDrawable
中的几个9补丁图像。我怀疑是否会有一种可靠的方法让你确定颜色是什么,一种适用于所有设备和所有Android版本的方法。
发布于 2010-01-15 03:52:22
这几乎是Android ListView Selector Color的副本:
另外,为什么你需要检测颜色?只需nothing,您的小部件就能适应该平台现有的外观和感觉。
或者,如果您正在编写自定义主题,只需使您的主题继承自android:Theme
。
https://stackoverflow.com/questions/2065430
复制相似问题