3

我想更改图像按钮的背景。基本上,我拥有的图像在透明背景上看起来很棒,而当它们中的一堆都具有非透明背景时有点糟糕。

这应该很容易 - 只需android:background将按钮上的按钮更改为透明颜色(通过可绘制):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_focussedstate_pressed版本(我认为它是从主题派生的)。我希望在按下或选择按钮时出现背景(并以完全相同的颜色/可绘制显示),当按下按钮时主题通常会使用该背景会很有帮助。

我想知道是否有办法执行以下操作之一,但到目前为止都找不到任何内容:

  1. 定义一个选择器,它在某些方面从另一个继承(类似于主题可以从另一个继承的方式)。

  2. 创建一个全新的选择器,但让它的 XML 引用主题的颜色/可绘制 对象state_focussedstate_pressed用于图像按钮。编辑:看起来这个选项已经失效了。我需要属性,但您不能从可绘制对象中引用它们。看这里

如果可能的话,我想在声明式 XML 而不是程序化 Java 中执行此操作。

4

1 回答 1

3

您可以将 Android 操作系统使用的可绘制对象复制到您的项目中,并在您的状态列表可绘制对象中使用它们。你可以在里面找到图片{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目录中找到,因为它是 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 背景的可绘制对象。

于 2013-04-01T03:19:21.207 回答