Android:如何使用压缩状态drawable为焦点状态绘制ImageButton

时间:2011-01-28 15:59:52

标签: android button background

我正在尝试实现一种效果,一旦按下,ImageButton将使用“按下”的橙色背景绘制,直到它失去焦点(触摸其他内容)。

StateListDrawable似乎是针对这种情况的,因为它允许我定义如何为聚焦状态绘制背景。如果我可以简单地定义应该使用按下的drawable绘制背景,那么对于聚焦状态会很棒。但是,我认为没有办法引用默认的“按下”drawable。

关于如何实现这种效果的任何建议?

3 个答案:

答案 0 :(得分:5)

如果我理解你的问题也许可以帮到你

我做同样的任务定义一个xml背景选择器,它包含每个状态的drawable,这个文件更广泛,因为你可以定义drawable,shape等...最重要的特性是你可以设置任何drawable或你想要的形状......

这里我定义了我的背景选择器......我称之为selector.xml并保存到drawable文件夹中。

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_selected="true" android:drawable="@drawable/shape_7"/>
        <item android:state_pressed="true" android:drawable="@drawable/shape_7" />
        <item android:state_pressed="false" android:drawable="@drawable/shape_6" />
    </selector>

稍后当我构建ImageButton时,我会附加上面提到的选择器...(您可以以编程方式或在xml布局中执行)

ImageButton imageButton = new ImageButton(this);
imageButton.setBackgroundDrawable(getResources().getDrawable(R.drawable.selector));

或xml方式

<ImageView
    android:background="@drawable/selector"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="4px"
    android:src="@drawable/switch_icon"/>

欢呼声

答案 1 :(得分:1)

查看android SDK中的drawables文件夹。您可以找到它默认使用的所有九个修补程序映像。你想要的那些可能被称为btn_pressed,btn_focused等。或类似的东西。您可以在技术上通过项目中的id引用它们,但我相信建议您将它们复制到项目中,因为ID不会被用于保持不变。

答案 2 :(得分:0)

这对我的应用程序的Holo Dark主题起作用,但它没有我想要的圆角。

RES /抽拉/ image_button_background.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/holo_blue_dark" android:state_pressed="true"/>
</selector>

用作:

android:background="@drawable/image_button_background"