Android 将 ImageButton 设置为切换

标签 android layout toggle imagebutton

如何让图像按钮在单击时保持“按下”状态?基本上我只是希望背景是郁闷的背景,但我不知道如何设置它。目前,我刚刚将选定的按钮背景复制到我的 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>

图像文件

警告:如果您使用这些,您的应用在具有自定义 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/

相关文章:

java - 单击表格行中的textView时出错

java - Android滤镜,改变可绘制颜色

javascript - 如何切换自动滚动功能/反向页面滚动?

javascript - 全高 div 固定

android - 在 Android 的 ContentProvider 中不实现 getType(Uri uri) 的副作用是什么?

android - Firebase android facebook,google,email 登录界面不弹出

html - 页脚重叠内容 - HTML 和 CSS

android - 代码似乎改变了我的布局文件

javascript - 子菜单的问题

android - 我可以使用什么来允许 Android 应用程序与 Rails 应用程序通信