1

在我当前的项目中,我正在使用 API 10 构建一个应用程序,它应该看起来像一个 ICS 应用程序。由于我的 GUI 不是很复杂,我可以手动构建这些,但按钮状态存在一些问题。

我用谷歌搜索了很多,没有发现任何对我有用的东西,所以我将不胜感激;)

我设计了一个带有 google ICS 股票图标的操作栏。例如,当有人触摸周围有 8dp 填充的 search-loupe-icon 时,它的背景颜色应更改为定义的突出显示颜色值。

所以现在你可能会建议一个可绘制的选择器。但我的情况是:我有一个icon-drawable有一个background-color,我想改变它。我不想更改图标,因此由于我无法从选择器-xml 更改背景颜色,因此这是行不通的。(我想我可以用我的图标静态 bg 颜色设置多个 drawable-xml,这样我就可以用一个选择器来引用那些不同颜色的图标,但是由于 shape-drawable-xml 不能有源,而 bitmap-drawable-xml 不能有背景颜色,这不是解决方案。)

如果我尝试更改我的 onclick-listener(也尝试过 onTouch)中的背景颜色:

ImageButton searchIcon = (ImageButton) findViewById(R.id.upper_actionbar_icon_search);
            searchIcon.setBackgroundColor(R.color.android_ics_blue_light);

图标获得深灰色背景色。这对于任何其他颜色也是如此,尽管 ImageButton 顶部没有任何内容。我还尝试了一个 ImageView。

所以有人可以向我解释一下我到底是如何定义一个突出显示的 bg 彩色图像而没有任何 hack(默认消失的图像位于图标上方并设置为 onclick 可见)。非常感谢!!

4

1 回答 1

2

好的,解决方案很简单。

为自己编写一个可绘制的选择器,如下所示:

<?xml version="1.0" encoding="utf-8"?>

<item android:state_selected="true">
    <shape android:shape="rectangle">
        <solid android:color="@color/android_ics_blue_light"/>
    </shape>
</item>


<item android:state_pressed="true">
    <shape android:shape="rectangle">
        <solid android:color="@color/android_ics_blue_light"/>
    </shape>
</item>

 <item>
    <shape android:shape="rectangle">
        <solid android:color="@color/light_grey"/>
    </shape>
</item>

在您的 ImageButton 代码中,将您的图标定义为 src 并将您的新可绘制对象定义为背景,如下所示:

<ImageButton
                <!-- ... -->
                android:src="@drawable/icon_search" 
                android:background="@drawable/actionbar_ontouch"

                />

奇迹般有效!

于 2012-04-28T09:56:04.230 回答