gpt4 book ai didi

android - 按下时 ImageButton 状态不显示

转载 作者:太空狗 更新时间:2023-10-29 16:43:03 28 4
gpt4 key购买 nike

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

编辑

使用下面 Joss 的回答,图像仍然没有改变,现在以一种奇怪的方式被拉伸(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 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" />

编辑跟进失真问题:

好吧,您可以做的是将图层分开。

因为背景是可拉伸(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 的地方。

或者,按照我在第一个答案中的建议进行操作,但改用 Button。如果这有帮助,请告诉我。

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com