【问题标题】:Android 3.0: cannot style Action Bar 's action item buttonsAndroid 3.0:无法设置 Action Bar 的操作项按钮的样式
【发布时间】:2012-01-05 11:17:15
【问题描述】:

这里是与主题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 中添加)

谢谢。

【问题讨论】:

    标签: android styles themes android-actionbar


    【解决方案1】:

    如果您想更改文本大小、颜色或样式等文本参数,则必须使用 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>
    

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

    【讨论】:

      【解决方案2】:

      大多数样式元素都可以使用,但填充是由用于生成操作按钮的系统布局提供的,并且可能不会达到您的预期。大多数操作栏指标(如填充和边距)通常应单独保留以保持 UX 一致性。即使是您记下的 item 填充属性也是为了为可能希望使用它来设置自己的自定义操作视图样式的应用提供信息。

      【讨论】:

      • 所以没有办法为这些组件以编程方式设置这些参数,唯一的办法就是使用其他一些构造元素?
      • 并非没有一些非常令人作呕的黑客行为,这些黑客行为很可能会因版本而异。 :) 就像我说的那样,您应该不理会这些东西,以便与系统的其余部分保持一致。
      • 我尝试使用 actionButtonStyle 更改文本大小、颜色和样式,但它也不起作用:(
      • @peno 如果您想更改标题文本、整个栏背景等内容,请查看 actionBarStyle 中可用的其他选项。
      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      相关资源
      最近更新 更多