android - 按下时的 ImageButton 状态不显示

标签 android selector imagebutton

我正在尝试创建一个具有默认图像的按钮,但是当按下它时,它会切换到新图像。我用过this tutorial以及this question但这是行不通的。

这是我的info_button_selector.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/ic_menu_info_details2" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/ic_menu_info_details2" /> <!-- focused -->
    <item android:drawable="@drawable/ic_menu_info_details" /> <!-- default -->
</selector>

这是我的 ImageButton 的代码:

                <ImageButton
                    android:id="@+id/apModeInfoButton"
                    android:layout_width="0dip"
                    android:background="@null"
                    android:layout_height="match_parent"
                    android:layout_weight="1.15"
                    android:clickable="true"
                    android:src="@drawable/info_button_selector" />

该按钮始终保持初始状态,看起来像 ic_menu_info_details

我将我的 info_button_selector.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/ic_menu_info_details2" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/ic_menu_info_details2" /> <!-- focused -->
    <item android:drawable="@drawable/ic_menu_info_details2" /> <!-- default -->
</selector>

ic_menu_info_details2 图像始终显示,这是预期的。这表明该按钮使用 XML 文件作为其可绘制资源,但为什么按钮在按下时不会改变其图像?

编辑

使用下面乔斯的答案,图像仍然没有改变,现在以一种奇怪的方式拉伸(stretch)。注意:两个图像完全相同,只是第二个图像缩放为 60% 大小。这可能意味着它正在工作,但我无法判断,因为 View 被拉伸(stretch)了。

                <ImageButton
                    android:id="@+id/apModeInfoButton"
                    android:layout_width="0dip"
                    android:layout_height="match_parent"
                    android:layout_weight="1.15"
                    android:clickable="true"
                    android:background="@drawable/info_button_selector" />

我使用了这两个版本的 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/ic_menu_info_details" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/ic_menu_info_details" /> <!-- focused -->
    <item android:drawable="@drawable/ic_menu_info_details" /> <!-- default -->
</selector>

<?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/ic_menu_info_details2" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/ic_menu_info_details2" /> <!-- focused -->
    <item android:drawable="@drawable/ic_menu_info_details2" /> <!-- default -->
</selector>

最佳答案

将该可绘制对象设置为 ImageButton 背景,而不是 src

 <ImageButton
          android:id="@+id/apModeInfoButton"
          android:layout_width="0dip"
          android:background="@drawable/info_button_selector"
          android:layout_height="match_parent"
          android:layout_weight="1.15"
          android:clickable="true" />

编辑以跟进失真问题:

那么你可以做的就是将各层分开。

因为背景是可拉伸(stretch)的,所以将其设置为BACKGROUND,并分离出不应拉伸(stretch)的图像并将其设置为SRC。

<ImageButton
         android:id="@+id/apModeInfoButton"
         android:layout_width="0dip"
         android:src="@drawable/non_scaleable_image"
         android:background="@drawable/gradient_bg"
         android:layout_height="match_parent"
         android:layout_weight="1.15"
         android:clickable="true" />

这样,您就可以将背景设置为渐变并在不损失质量的情况下拉伸(stretch)它,并且 SRC 图像不会调整大小和扭曲。

这确实是 ImageButton 的用途。

或者,按照我在第一个答案中建议的操作,但使用按钮代替。让我知道这是否有帮助。

关于android - 按下时的 ImageButton 状态不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14690074/

相关文章:

ios - 通过选择器发送多个参数?

android - 如何为警报对话框中的图像按钮设置 onclick 监听器

android - android中的图像按钮加载时间慢

android - 如何注入(inject)screen_on事件? (不适用于初学者)

android - 通过径向 react 显示 Material 颜色

javascript - 在javascript中使用类选择表格单元格

jquery - 如何从文本旁边的文本框中获取值

java - 骰子仿真 - 用于循环的 ImageButton 名称的串联

android - 上传Apk到华为AppGallery失败

android - 如何使用 Intent 启动 ListActivity?