【问题标题】:imagebutton with @null background (transparent) [duplicate]具有@null背景的图像按钮(透明)[重复]
【发布时间】:2012-03-14 17:44:39
【问题描述】:

我有一个带有透明图像源的图像按钮,但图像按钮的背景颜色是典型的灰色按钮颜色。

我想设置 background = @null,这很好用。

但是,当我按下这个图像按钮时,我看不到表明我正在按下按钮的颜色。

如果我在按下按钮时删除背景 = @null,则更改颜色以让用户知道您正在按下。

我读到您可以制作一个包含 3 个图像的 xml,指定何时按下按钮、何时正常以及何时获得焦点。但我认为存在一种更简单的方法。

【问题讨论】:

  • 也许你说with 3 images... 是个好主意。
  • 那么我必须为每个按钮创建 2 或 3 个图像??
  • 使用selector定义不同的时间,每个按钮也使用2或3张图片。

标签: android


【解决方案1】:

按照上述答案,使用默认状态设置为透明颜色的选择器可绘制对象(用于背景,而不是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"

【讨论】:

  • 这很好用,谢谢!它的行为就像 ICS 中的 ?android:attr/selectableItemBackground
【解决方案2】:

您删除了背景,因为您不喜欢它。使用state list 的背景,取决于您如何触摸它,您自己不会使用 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 文件放在您的可绘制文件夹中即可。 (res/drawable)

【讨论】:

    【解决方案3】:

    默认情况下,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>
    

    【讨论】:

      【解决方案4】:

      使用 android:background="#1000" 作为 xml 中的按钮

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-13
        • 2021-08-24
        • 2017-11-04
        • 2014-12-19
        • 2020-04-08
        • 2016-08-02
        • 2020-12-09
        相关资源
        最近更新 更多