如何更改操作栏大小

38

我想改变操作栏的大小。我已经尝试了以下编码。

<style name="MyTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/CustomActionBar</item>
</style>
<style name="CustomActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <!--  <item name="android:background">@drawable/action_bar_style</item> -->
    <item name="android:actionBarSize">15dp</item>
    <item name="android:background">@drawable/header_bar</item>
</style>

但操作栏大小没有改变。还有其他的方法吗?我正在使用 API 等级 11。

谢谢。


android:actionBarSize 对我有效,但 API 级别为 21。 - Shree Harsha S
最好的解释在这里:http://code2care.org/pages/change-height-of-android-actionbar/ - Abdu
5个回答

78

使用height属性,actionBarSize用于其他目的。

<item name="android:height">@dimen/bar_height</item>

说明:

来自ActionBar的源代码:

mContentHeight = a.getLayoutDimension(R.styleable.ActionBar_height, 0);

我们可以看到正在使用R.styleable.ActionBar_height来设置高度。 Stylable属性名称生成为component_attribute(如果您曾经使用自定义的stylable视图,您会注意到这一点)。因此,Actionbar是组件的名称,而height是要使用的属性的名称。由于这是系统属性,因此在android命名空间下定义。

2014年12月更新:

AppCompat库现在提供了对最新ActionBar(或Toolbar)和主题支持的扩展,以支持旧版Android版本。以下是这种应用程序主题的示例 /res/values/styles.xml

<resources>

    <!-- Application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">

        <!-- Main theme colors -->
        <!--   your app branding color for the app bar -->
        <item name="colorPrimary">@color/primary</item>

        <!--   darker variant for the status bar and contextual app bars -->
        <item name="colorPrimaryDark">@color/primary_dark</item>

        <!--   theme UI controls like checkboxes and text fields -->
        <!--   native widgets will now be "tinted" with accent color -->
        <item name="colorAccent">@color/accent</item>

        <!--Action bar style-->
        <item name="android:actionBarStyle">@style/AppTheme.ActionBar</item>
        <item name="actionBarStyle">@style/AppTheme.ActionBar</item>

    </style>

    <style name="AppTheme.ActionBar" parent="Widget.AppCompat.Light.ActionBar">
        <item name="android:titleTextStyle">@style/AppTheme.ActionBar.TitleText</item>
        <item name="titleTextStyle">@style/AppTheme.ActionBar.TitleText</item>
        <item name="android:height">@dimen/bar_height</item>
        <item name="height">@dimen/bar_height</item>
    </style>

    <style name="AppTheme.ActionBar.TitleText" parent="TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textSize">@dimen/bar_text_size</item>
        <item name="android:textColor">@color/bar_text_color</item>
    </style>
</resources>

这种样式现在可以通过在AndroidManifest.xml<application>标签中使用android:theme="@style/AppTheme"来设置为应用程序主题。

请注意重复条目的使用

<item name="android:actionBarStyle">
<item name="actionBarStyle">

没有 android 命名空间的属性支持兼容库和本地属性。这些属性中的一些在旧版本中不存在于 android 命名空间下,并属于支持库。

在其他一些地方,您需要使用 app 命名空间(xmlns:app="http://schemas.android.com/apk/res-auto"),例如在菜单 XML 文件中使用 app:showAsAction="always"

更新于2015年4月

AppCompat Library v22 也已经发布。阅读文章以了解新功能。


1
@user1156041,您能否详细解释一下这个LOC:mContentHeight = a.getLayoutDimension(R.styleable.ActionBar_height, 0);?mContentHeight、a等是什么?我是新手,使用起来很困难。 - nida
1
我已经按照上述方法操作了,但是操作栏的高度仍然是固定的。 - dsharew
@S.D. 它在Android 2.3上无法工作...有什么建议可以让它在Android 2.3上运行吗? - akkilis
@akkilis 在2.3上,你必须使用Appcompat库。请查看更新的答案。 - S.D.
非常好的答案,尽管我不明白为什么TitleText从ActionBar和AppTheme继承。它真的需要一个actionBarStyle吗?或者高度设置为bar_height? - Hjalmar
1
在5.0设备上,我遇到了一些问题,无法使这个建议起作用。我发现从高度<item name="height">@dimen/bar_height</item>中删除命名空间可以解决这个问题。 - Joey Harwood

20

简单点说,只需将actionBarSize项目放在MyTheme样式下面,像这样:

<style name="MyTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarSize">15dp</item>
    <item name="actionBarSize">15dp</item>
    ...
</style>

解释:

R.styleable中,我们可以看到R.styleable.Theme_actionBarSize是在主题级别定义的可样式化属性。

此外,从源代码res/values/styles.xml中,我们可以看到如何使用actionBarSize来设置height

<style name="Widget.ActionBar">
    ...
    <item name="android:height">?android:attr/actionBarSize</item>

3
将以下内容添加到您从清单文件引用的自定义主题样式XML中:
<item name="android:windowTitleSize">58dip</item>

例如,如果您的清单文件看起来像这样:
<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        **android:theme="@style/AppTheme"** >

您的主题样式应该至少像这样:

<!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">            
        <item name="android:windowTitleSize">54dip</item>
    </style>

2
S.D.的解决方案并不适用于我。 在我的情况下,我使用了AppCompat v-21库。 我只是添加了

标签。
android:layout_height="@dimen/actionBarSize"
android:minHeight="@dimen/actionBarSize"

我将它添加到我的布局文件中并且它可以正常工作。


1
请确保将S.D.的代码添加到styles.xml中,然后再添加。
android:theme="@style/thin_ab"

将代码添加到主清单文件中的<application>元素中。(我是个新手,花了大约两个小时才找到这一点。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接