Android 3.0:无法设置Action Bar的动作项按钮样式

时间:2011-11-24 09:06:28

标签: android styles themes android-actionbar

以下是与主题http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems

相关的开发指南

所以我们有活动

public class MyActivity extends Activity {

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.my_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
    case R.id.first_menu_button:
        return true;
    case R.id.second_menu_button:
        return true;

    default:
        return super.onOptionsItemSelected(item);
    }
}

R.menu.my_menu

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/first_menu_button"
        android:showAsAction="always"
        android:icon="@drawable/btn_first"/>
    <item
        android:id="@+id/second_menu_button"
        android:showAsAction="always"
        android:icon="@drawable/btn_second"/>
</menu>

要设置按钮http://developer.android.com/guide/topics/ui/actionbar.html#ActionItemStyles的样式,我们应该使用android:actionButtonStyle属性。我这样做了:

在清单中:

<activity android:name="com.root.test.MyActivity"
    android:theme="@style/CustomActionBarStyle"
</activity>

在styles.xml中:

<style name="CustomActionBarStyle" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionButtonStyle">@style/customActionButtonStyle</item>
    <item name="android:windowActionBar">true</item>
    <item name="android:windowNoTitle">false</item>   
</style>

<style name="customActionButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton">
    <item name="android:[...]
</style>

问题在于,无论我在customActionButtonStyle中写什么,都只是忽略它。 CustomActionBarStyle中的其他属性有效(更复杂的是,为了简单起见,它们被省略)。我的主要目的是设置自定义填充。有没有其他方法可以做到这一点,就像其他一些,而不是android:actionButtonStyle属性?或者有人知道如何使这项工作? (android:abItemPadding属性仅在3.1中添加)

感谢。

2 个答案:

答案 0 :(得分:4)

如果要更改文本大小,颜色或样式等文本参数,则必须使用actionMenuTextAppearance。这是我的ActionBarSherlock代码:

<item name="actionMenuTextAppearance">@style/MyProject.ActionMenuTextAppearance</item>
<item name="android:actionMenuTextAppearance">@style/MyProject.ActionMenuTextAppearance</item>

...

<style name="MyProject.ActionMenuTextAppearance" parent="TextAppearance.Sherlock.Widget.ActionBar.Menu">
    <item name="android:textSize">15sp</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textAllCaps">false</item>
</style>

编辑:这是我使用ActionBarSherlock的styling action bar模板:https://github.com/petrnohejl/Android-Templates-And-Utilities/tree/master/Res-Theme-Holo-Deprecated

答案 1 :(得分:0)

大多数样式元素都可以使用,但填充由用于生成操作按钮的系统布局提供,可能无法达到预期效果。对于UX一致性,大多数操作栏指标(如填充和边距)通常应单独保留。即使您注意到的项目填充属性也适用于可能希望使用它来设置自己的自定义操作视图样式的应用程序。