Android 设置 ImageButton 为 Toggle [英] Android Set ImageButton as Toggle

查看:17
本文介绍了Android 设置 ImageButton 为 Toggle的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何让图像按钮在单击时保持按下"状态?基本上我只是想让背景成为郁闷的背景,但我不知道如何设置它.目前,我刚刚将选定的按钮背景复制到我的 res 文件夹中,但是当我将其设置为背景时,它变得模糊(因为原始图像比按钮本身大).

How can I have an imagebutton stay in the 'pressed' state when it is clicked? Basically I just want the background to be the depressed background, but I can't figure out how to set it. At the moment, I've just copied the selected button background into my res folder, but when I set it as the background, it becomes blurry (since the original image is bigger than the button itself).

普通背景:替代文字 http://img707.imageshack.us/img707/9199/ss20100426163452.png我得到了什么:替代文字 http://img707.imageshack.us/img707/912/ss20100426163357.png替代文字 http://img3.imageshack.us/img3/8304/ss20100426163623.png

Normal Background: alt text http://img707.imageshack.us/img707/9199/ss20100426163452.png What I'm getting: alt text http://img707.imageshack.us/img707/912/ss20100426163357.png alt text http://img3.imageshack.us/img3/8304/ss20100426163623.png

此外,考虑到许多不同的 UI 布局,我不相信我真的可以使用这种方法.按钮应根据用户使用的 UI 保持按下状态.

Also I don't believe I can actually use this method considering the many different UI layouts. The button should stay pressed as per the UI the user is using.

推荐答案

有几种方法可以做到这一点:

There are a few ways of doing this:

首先,您可以简单地使用 ImageButton,并在 Java 中通过单击手动切换其可绘制的图像.这就是 库存音乐播放器 在 Android 上 作用于 shuffle 按钮.尽管您无法控制处于选中状态的按钮背景,但您可以换出图像,从 Android 用户界面一致性的角度来看,这可能是有利的.

First, you can simply use an ImageButton, and manually toggle its image drawable on click in Java. This is what the stock Music player on Android does for the shuffle button, for example. Although you won't have control over the button background in its checked state, you'll be able to swap out the image, which may be favorable from an Android UI-consistency perspective.

另一种选择是使用一组复杂的可绘制对象和九个补丁来获取 ToggleButton 中的图像,并可以选择在切换时更改背景和/或图像资源.这就是我将在下面展示的选项.但请记住,在执行此操作之前请注意 UI 的一致性.

Another option is to use a complex set of drawables and nine-patches to get an image inside a ToggleButton, with the option of changing the background and/or the image resource upon toggle. That's the option I'll show below. But remember, be cautious about UI consistency before doing this.

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>

图像文件

警告:如果您使用这些,您的应用在具有自定义操作系统 UI(即 HTC 的 Sense UI)的设备上看起来会不一致.

WARNING: if you use these, your app will look inconsistent on devices with customized OS UIs (i.e. HTC's Sense UI).

  • ic_mp_shuffle_<state>_btn.9.png 需要九个补丁,以便图像居中而不是拉伸以适合按钮.下面是图标的 hdpi 版本示例:
  • ic_mp_shuffle_<state>_btn.9.png need to be nine-patches, so that the image gets centered and not stretched to fit the button. Below are example hdpi versions of the icon:

res/drawable-(h|m|ldpi)/ic_mp_shuffle_(on|off)_btn.9.png

最后说明:请记住尽可能与系统 UI 保持一致,并注意您的应用可能会在具有定制版本操作系统的设备上运行,这些操作系统的 UI 元素具有不同的图形像按钮.一个例子是 HTC Sense,它有绿色按钮代替灰色/橙色/黄色的库存 Android.因此,如果您最终从开源存储库中复制 btn_default_... PNG 文件以创建可切换的按钮背景,则会破坏这些设备上的一致性.

Final Note: Remember to be consistent with the system UI when possible, and be mindful of the fact that your app may run on devices with customized versions of the OS that have different graphics for UI elements like buttons. An example of this is HTC Sense, which has green buttons in place of the grey/orange/yellow ones in stock Android. So, if you end up copying the btn_default_... PNG files from the open source repository to create a toggle-able button background, you'll break consistency on those devices.

这篇关于Android 设置 ImageButton 为 Toggle的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆