【发布时间】:2012-12-03 03:30:27
【问题描述】:
所以我想知道如何实现一个带有徽标按钮的操作栏,每个状态都有不同的图像。(按下、释放等)。
我知道如何为普通按钮执行此操作,但我不确定是否可以使用操作栏徽标按钮?
如果不是,如何实现支持此功能的操作栏?外部库?
谢谢。
【问题讨论】:
标签: java android android-actionbar
所以我想知道如何实现一个带有徽标按钮的操作栏,每个状态都有不同的图像。(按下、释放等)。
我知道如何为普通按钮执行此操作,但我不确定是否可以使用操作栏徽标按钮?
如果不是,如何实现支持此功能的操作栏?外部库?
谢谢。
【问题讨论】:
标签: java android android-actionbar
在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_pressed 和 button_normal 只是您的可绘制目录之一中的常规 png 文件(例如/drawables-hdpi)
然后在你的 menu.xml 或你的代码中你可以参考@drawable/button_selector 或R.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 的工作原理。
【讨论】:
您可以使用选择器来选择不同的图像。 Android ImageButton with disabled UI feel 可能有帮助
【讨论】:
我想你正在寻找这个:
final ActionBar bar = getActionBar();
bar.setDisplayHomeAsUpEnabled(true);
这会自动使您设置的徽标看起来像是在单击时被按下。不需要有不同的图像来显示状态变化。这是一个很简单的方法。虽然如果您使用的是 ActionBarSherlock,我认为这是行不通的。我相信严格 4.0。查看ActionBar 上的文档。
【讨论】: