我正在尝试创建一个具有默认图像的按钮,但是当按下它时会切换到新图像。我已将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
图像是整个时间显示的,这是预期的。这表明按钮IS使用XML文件作为其可绘制资源,但为什么按下时按钮不会改变其图像?
修改
使用下面的Joss答案,图像仍然没有改变,现在以一种奇怪的方式拉伸。注意:两个图像完全相同,只是第二个图像缩放为60%的大小。这可能意味着它正在发挥作用,但由于视图已被拉长,我无法分辨。
<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>
答案 0 :(得分:4)
将drawable设置为ImageButton background 而不是 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" />
编辑以跟进失真问题:
你可以做的就是让图层分开。
因为背景是可伸缩的,所以将其设置为BACKGROUND并分离不应拉伸的图像并将其设置为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" />
这样,您可以将背景作为渐变并使其拉伸而不会降低质量,并且SRC图像不会调整大小和扭曲。
这就是ImageButton的用途。
或者,按照我在第一个答案中建议的那样做,但改用Button。如果这有帮助,请告诉我。
答案 1 :(得分:1)
您应该尝试使用完整的不同图像获取详细信息2,并查看图像是否实际上正在更改,但不会重新调整大小。我不希望有状态的按钮重新调整大小,可能会使用两个不同的图像并设置可见性。