【问题标题】:Android, How to change the actionbars logo button on state change?Android,如何在状态更改时更改操作栏徽标按钮?
【发布时间】:2012-12-03 03:30:27
【问题描述】:

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

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

如果不是,如何实现支持此功能的操作栏?外部库?

谢谢。

【问题讨论】:

    标签: java android android-actionbar


    【解决方案1】:

    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>
    

    用您选择的可绘制对象替换背景android:state_pressed="true"

    仅仅为了背景需要做很多事情,但这就是ActionBar 的工作原理。

    【讨论】:

    • 你好,这是否也替换了按下时默认的蓝色突出显示?
    • 替换背景还有很多工作要做。查看编辑后的答案
    • 我看到你在引用 Shelock 栏,这意味着我需要实现这个第三方库。所以我猜没有lib和标准操作栏就没有办法做到这一点?
    • ActionBar 仅适用于 Android 3.0+。如果您想要向后兼容,您需要将 ActionBar 移植到 Android 3.0 之前的版本的 ActionBarSherlock。见actionbarsherlock.com
    • 那么,如果我只支持 3.0+,我不需要实现 actionbarsherlock,对吗?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我想你正在寻找这个:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多