我想更改图片按钮的背景。基本上我在透明背景上看起来很棒,而且当它们中的一堆都具有不透明的背景时,它们有点糟糕。
这应该很简单 - 只需将按钮上的android:background
更改为透明色(通过drawable):
click_background.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true"><color android:color="#FF008080" />
</item>
<item android:state_pressed="true"><color android:color="#FF008080" />
</item>
<item><color android:color="#00000000" />
</item>
</selector>
然后是按钮
<ImageButton
android:id="@+id/players"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:background="@drawable/click_background"
android:contentDescription="@string/players"
android:src="@drawable/speaker_tile" />
问题是我实际上想要保留背景的state_focussed
和state_pressed
版本(我认为这是从主题派生的)。当按下或选择按钮(并且显示完全相同的颜色/可绘制)时,我希望在按下按钮时主题将使用的按钮会显示背景。
我想知道是否有办法执行以下操作之一,但到目前为止还无法找到任何内容:
定义一个选择器,在某些内容中继承自另一个(类似于主题可以从另一个继承的方式)。
创建一个全新的选择器,但让它的XML引用为用于图像按钮的主题state_focussed
和state_pressed
的颜色/可绘制。 编辑:看起来这个选项已经出来了。我需要属性,但你不能从drawable中引用它们。 See here
如果可能,我想在Declarative XML而不是Programmatic Java中执行此操作。
答案 0 :(得分:3)
您可以将Android操作系统使用的drawable复制到项目中,并在状态列表drawable中使用它们。您可以在{android-sdk-directory}/platforms/android-##/data/res/drawable[-*dpi]
修改强>
如果您转到{android-sdk-directory}/platforms/android-##/data/res/values
,则会找到Android使用的themes.xml
和styles.xml
个文件。使用它们,您可以找出您要寻找的绘图。
例如,Android较新版本的默认主题是Theme.Holo
。此主题具有ImageButtons的默认样式,如下所示:
<item name="imageButtonStyle">@android:style/Widget.Holo.ImageButton</item>
在styles.xml
中,此样式定义如下:
<style name="Widget.Holo.ImageButton" parent="Widget.ImageButton">
<item name="android:background">@android:drawable/btn_default_holo_dark</item>
</style>
谢天谢地,背景属性就在那里定义了。有时它是从父式继承的,你必须找到它。无论如何,这里是drawable(在/drawable
目录中找到,因为它是xml):
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:state_enabled="true"
android:drawable="@drawable/btn_default_normal_holo_dark" />
<item android:state_window_focused="false" android:state_enabled="false"
android:drawable="@drawable/btn_default_disabled_holo_dark" />
<item android:state_pressed="true"
android:drawable="@drawable/btn_default_pressed_holo_dark" />
<item android:state_focused="true" android:state_enabled="true"
android:drawable="@drawable/btn_default_focused_holo_dark" />
<item android:state_enabled="true"
android:drawable="@drawable/btn_default_normal_holo_dark" />
<item android:state_focused="true"
android:drawable="@drawable/btn_default_disabled_focused_holo_dark" />
<item
android:drawable="@drawable/btn_default_disabled_holo_dark" />
</selector>
所以这些是Android在默认(全黑暗)主题中用于标准ImageButton背景的drawables。