imagebutton使用@null背景(透明)

3
我有一个带透明度图像源的imagebutton,但是imagebutton的背景颜色是典型的灰色按钮颜色。
我想设置background = @null,这个方法很好用。
但是,当我按下这个imagebutton时,我看不到指示我正在按下按钮的颜色。
如果我删除background = @null,当我按下按钮时,会改变颜色以让用户知道您正在按下。
我读到可以创建一个xml文件并指定3个图像,分别表示按钮被按下、正常状态和焦点状态。但我认为有一种更简单的方法。

也许你说“用三张图片……”是个好主意。 - idiottiger
那我每个按钮都要创建2到3张图片吗? - thenosic
使用选择器定义不同的时间,还会为每个按钮使用2或3个图像。 - idiottiger
4个回答

13

按照上面的答案,使用一个选择器可绘制对象(用于背景,而不是 null),其默认状态设置为透明颜色:

*selector_with_transparency:*

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:state_pressed="true" android:drawable="@drawable/pressed" />
    <item android:drawable="@drawable/transparent" />

</selector>

按下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <solid android:color="#0077cc" />

</shape>

透明:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#00000000"/>

</shape>

然后对于 ImageButton

background = "@drawable/selector_with_transparency"

1
非常好用,谢谢!它的行为就像ICS中的?android:attr/selectableItemBackground - Rafael Nobre

2
您删除了背景,因为您不喜欢它。使用状态列表的背景会根据您的触摸方式而变化,您不需要自己使用3张图片。换句话说,您没有显示按钮被按下的状态,您需要这样做。然后使用3张图片。只需使用您拥有的图像,并创建另外两个指示它处于聚焦和按下状态的图像。

例如:main.xml

<?xml version="1.0" encoding="UTF-8"?>
 <Button 
         android:id="@+id/btn"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:background="@drawable/background_color"/>

background_color.xml

 <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true"
            android:drawable="@drawable/button_pressed" />
        <item android:state_focused="true"
            android:drawable="@drawable/button_focused" />
        <item android:drawable="@drawable/button_normal" />
    </selector>

非常简单,只需将xml文件放在您的drawable文件夹中即可。(res/drawable)


1

默认情况下,Android 使用 R.drawable.button_default(button.default.xml)作为其背景,直到用户明确设置背景。 最好的方法是创建选择器。类似的内容在 Android SDK 中也有提到。

button_default.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" />
    <item android:state_window_focused="false" android:state_enabled="false"
        android:drawable="@drawable/btn_default_normal_disable" />
    <item android:state_pressed="true" 
        android:drawable="@drawable/btn_default_pressed" />
    <item android:state_focused="true" android:state_enabled="true"
        android:drawable="@drawable/btn_default_selected" />
    <item android:state_enabled="true"
        android:drawable="@drawable/btn_default_normal" />
    <item android:state_focused="true"
        android:drawable="@drawable/btn_default_normal_disable_focused" />
    <item
         android:drawable="@drawable/btn_default_normal_disable" />
</selector>

0

在XML中使用android:background="#1000"来设置按钮的背景


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接