2

我正在尝试创建一个具有默认图像的按钮,但是当按下它时它会切换到新图像。我已经使用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 文件作为其可绘制资源,但为什么按钮在按下时不会更改其图像?

编辑

使用下面乔斯的回答,图像仍然没有改变,现在以一种奇怪的方式拉伸。注意:两个图像完全相同,只是第二个图像被缩放为大小的 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>
4

2 回答 2

4

将该可绘制对象设置为 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" />

编辑以跟进失真问题:

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

因为背景是可拉伸的,所以将其设置为背景,并将不应拉伸的图像分开并将其设置为 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 代替。让我知道这是否有帮助。

于 2013-02-04T15:40:30.600 回答
1

您应该尝试使用完整的不同图像来获取详细信息2,并查看图像是否实际上正在更改,但没有重新调整大小。我不希望有状态按钮重新调整大小,也许使用两个不同的图像并设置可见性。

于 2013-02-04T16:10:34.020 回答