如何让图像按钮在单击时保持“按下”状态?基本上我只是希望背景是郁闷的背景,但我不知道如何设置它。目前,我刚刚将选定的按钮背景复制到我的 res 文件夹中,但是当我将其设置为背景时,它变得模糊(因为原始图像比按钮本身大)。
普通背景: alt text http://img707.imageshack.us/img707/9199/ss20100426163452.png 我得到了什么: alt text http://img707.imageshack.us/img707/912/ss20100426163357.png alt text http://img3.imageshack.us/img3/8304/ss20100426163623.png
另外,考虑到许多不同的 UI 布局,我不相信我真的可以使用这种方法。根据用户使用的 UI,该按钮应保持按下状态。
最佳答案
有几种方法可以做到这一点:
首先,您可以简单地使用 ImageButton
,并在 Java 中单击时手动切换其可绘制图像。这就是 stock Music player安卓 does for the shuffle button , 例如。尽管您无法控制处于选中状态的按钮背景,但您可以换出图像,从 Android UI 一致性的角度来看,这可能是有利的。
另一种选择是使用一组复杂的可绘制对象和 9-patch 来获取 ToggleButton
中的图像。 ,可以选择在切换时更改背景和/或图像资源。这就是我将在下面展示的选项。但请记住,在执行此操作之前,请注意 UI 一致性。
res/layout/foo.xml
...
<ToggleButton
android:textOn="" android:textOff=""
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shuffle_button" />
...
res/drawable/shuffle_button.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- use "@android:drawable/btn_default" to keep consistent with system -->
<item android:drawable="@drawable/toggle_button_background" />
<item android:drawable="@drawable/shuffle_button_image" />
</layer-list>
res/drawable/toggle_button_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- checked state -->
<item android:state_pressed="false" android:state_checked="true"
android:drawable="@drawable/btn_default_checked" />
<item android:state_window_focused="false" android:state_enabled="true"
android:drawable="@drawable/btn_default_normal" />
<item android:state_window_focused="false" android:state_enabled="false"
android:drawable="@drawable/btn_default_normal_disable" />
<item android:state_pressed="true"
android:drawable="@drawable/btn_default_pressed" />
<item android:state_focused="true" android:state_enabled="true"
android:drawable="@drawable/btn_default_selected" />
<item android:state_enabled="true"
android:drawable="@drawable/btn_default_normal" />
<item android:state_focused="true"
android:drawable="@drawable/btn_default_normal_disable_focused" />
<item android:drawable="@drawable/btn_default_normal_disable" />
</selector>
res/drawable/shuffle_button_image.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_mp_shuffle_on_btn" android:state_checked="true" />
<item android:drawable="@drawable/ic_mp_shuffle_off_btn" />
</selector>
图像文件
-
btn_default_<state>.9.png
可以在frameworks/base.git
中找到 在下面core/res/res/drawable-hdpi
和core/res/res/drawable-mdpi
(也是 ldpi)。
警告:如果您使用这些,您的应用在具有自定义 OS UI(即 HTC 的 Sense UI)的设备上看起来会不一致。
-
ic_mp_shuffle_<state>_btn.9.png
需要 9-patch ,以便图像居中而不是拉伸(stretch)以适合按钮。以下是示例hdpi
图标的版本:
res/drawable-(h|m|ldpi)/ic_mp_shuffle_(on|off)_btn.9.png
最后提示:请记住尽可能与系统 UI 保持一致,并注意您的应用可能在具有自定义版本的操作系统的设备上运行,这些操作系统的 UI 元素具有不同的图形像按钮。 HTC Sense 就是一个例子。 ,它有绿色按钮代替库存 Android 中的灰色/橙色/黄色按钮。所以,如果你最终复制了 btn_default_...
来自开源存储库的 PNG 文件来创建可切换按钮背景,您将破坏这些设备上的一致性。
关于Android 将 ImageButton 设置为切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2716686/