我正在尝试创建一个具有默认图像的按钮,但是当按下它时,它会切换到新图像。我用过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/