Android中复杂的自定义按钮状态

Posted

技术标签:

【中文标题】Android中复杂的自定义按钮状态【英文标题】:Complex custom button states in Android 【发布时间】:2012-04-21 22:41:36 【问题描述】:

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

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

我设计了一个带有 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 可见)。 非常感谢!!

【问题讨论】:

你试过actionbarsherlock吗? 谢谢你,但我已经把整个东西设计得看起来很棒,我不想为了那些愚蠢的亮点重做所有的想法。 【参考方案1】:

好的,解决方法很简单。

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

<?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"

                />

像魅力一样工作!

【讨论】:

以上是关于Android中复杂的自定义按钮状态的主要内容,如果未能解决你的问题,请参考以下文章

快速设置重置我的自定义按钮的状态

按钮未显示在android的自定义列表视图中

带有进度条的按钮 android

如何在android的自定义视图中访问按钮的setOnClickListener?

从android中的自定义零按钮中删除edittext中的前导零

Swift - 处理表格视图多个部分的自定义复选标记按钮状态