所以我想知道如何实现一个带有徽标按钮的动作栏,每个州的不同图像。(按下,释放等)。
我知道如何为普通按钮执行此操作,但我不确定是否可以使用actionbars徽标按钮?
如果不是,那怎么可以实现支持这个的动作栏呢?外部库?
谢谢。
答案 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_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>
使用您选择的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上的文档。