Android,如何在状态更改时更改actionbars徽标按钮?

时间:2012-12-03 03:30:28

标签: java android android-actionbar

所以我想知道如何实现一个带有徽标按钮的动作栏,每个州的不同图像。(按下,释放等)。

我知道如何为普通按钮执行此操作,但我不确定是否可以使用actionbars徽标按钮?

如果不是,那怎么可以实现支持这个的动作栏呢?外部库?

谢谢。

3 个答案:

答案 0 :(得分:3)

res/drawable中创建可绘制的xml文件,例如res/drawable/button_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_pressed"
      android:state_pressed="true" />
    <item android:drawable="@drawable/button_normal" />
</selector>

其中button_pressedbutton_normal只是您的一个可绘制目录中的常规png文件(例如/ drawables-hdpi

然后在您的menu.xml或代码中,您可以参考@drawable/button_selectorR.drawable.button_selector,按下按钮时图像会自动更改。

如果您需要更改ActionBar按钮背景,则需要覆盖res/values/style.xml中的主题。

<style name="YourTheme.Sherlock" parent="@style/Theme.Sherlock">
    <item name="actionBarItemBackground">@drawable/actionbar_item_background_selector</item>
    <item name="android:actionBarItemBackground">@drawable/actionbar_item_background_selector</item>
</style>

这两行都很重要:一个用于SherlockActionBar,另一个用于标准ActionBar

然后将主题设置为清单中的活动:

   <activity
        android:name=".yourActivity"
        android:theme="@style/YourTheme.Sherlock" >
    </activity>

此处actionbar_item_background_selector.xml位于res/drawable

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<!-- Even though these two point to the same resource, have two states so the drawable     will invalidate itself when coming out of pressed state. -->
    <item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/scene_overlay_bar_pressed_center"     />
    <item android:state_focused="true"  android:state_enabled="false"                                  android:drawable="@drawable/abs__list_selector_disabled_holo_light" />
    <item android:state_focused="true"                                android:state_pressed="true" android:drawable="@drawable/scene_overlay_bar_pressed_center" />
    <item android:state_focused="false"                               android:state_pressed="true" android:drawable="@drawable/scene_overlay_bar_pressed_center" />
    <item android:state_focused="true"                                                             android:drawable="@drawable/abs__list_focused_holo" />
    <item                                                                                          android:drawable="@android:color/transparent" />

</selector>

使用您选择的drawable替换背景android:state_pressed="true"

只为背景做很多事情,但这就是ActionBar的工作方式。

答案 1 :(得分:1)

您可以使用选择器选择不同的图像。 Android ImageButton with disabled UI feel 可能会有所帮助

答案 2 :(得分:0)

我认为你正在寻找这个:

final ActionBar bar = getActionBar();
bar.setDisplayHomeAsUpEnabled(true);

这会自动使您设置的徽标在单击时被按下。无需使用不同的图像来显示状态变化。这是一个非常简单的方法。虽然如果你使用的是ActionBarSherlock,我认为这不会起作用。严格4.0我相信。查看ActionBar上的文档。