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的自定义视图中访问按钮的setOnClickListener?