有没有办法减少Action Bar上的Action Item Icons之间的间距?

时间:2012-02-03 16:27:45

标签: android

我想减少添加到操作栏的操作项图标之间的间距。有没有办法可以做到这一点?

8 个答案:

答案 0 :(得分:64)

使用自定义android:actionButtonStyle。

<item name="android:actionButtonStyle">@style/ActionButtonStyle</item>

,魔法在这里:

<style name="ActionButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton">
    <item name="android:minWidth">0dip</item>
    <item name="android:paddingLeft">0dip</item>
    <item name="android:paddingRight">0dip</item>                  
</style>

normaly minWidth设置为56 dip。

答案 1 :(得分:16)

对于SDK版本17+,你应该使用paddingStart和paddingEnd属性,如果你有minSdkVersion&lt; 17你必须为每个版本使用不同的样式,如下所示:

res / values / styles.xml:

<item name="android:actionButtonStyle">@style/ActionButtonStyle</item>

<style name="ActionButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton">
    <item name="android:minWidth">0dip</item>
    <item name="android:paddingLeft">0dip</item>
    <item name="android:paddingRight">0dip</item>                  
</style>

res / values-v17 / styles.xml:

<item name="android:actionButtonStyle">@style/ActionButtonStyle</item>

<style name="ActionButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton">
    <item name="android:minWidth">0dip</item>
    <item name="android:paddingStart">0dip</item>
    <item name="android:paddingEnd">0dip</item>                  
</style>

答案 2 :(得分:15)

感谢Shai的提示,这对我来说非常好(在Android 4.0.x设备上): (我的整个style.xml)

<resources xmlns:android="http://schemas.android.com/apk/res/android">

<!--
    Base application theme, dependent on API level. This theme is replaced
    by AppBaseTheme from res/values-vXX/styles.xml on newer devices.

-->
<style name="AppBaseTheme" parent="android:Theme.Light">
    <!--
        Theme customizations available in newer API levels can go in
        res/values-vXX/styles.xml, while customizations related to
        backward-compatibility can go here.

    -->
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">

    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    <item name="android:actionButtonStyle">@style/ActionButtonStyle</item>
</style>

<style name="ActionButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton">
    <item name="android:minWidth">0dip</item>
    <item name="android:paddingLeft">0dip</item>
    <item name="android:paddingRight">0dip</item>
</style>

答案 3 :(得分:10)

要使用appCompat支持旧版本,除此之外什么都不需要:

在您的应用程序的appTheme中:

<item name="actionButtonStyle">@style/ActionButtonStyle</item>

并创建一个样式 在 style.xml

 <!--this will reduce space between actionBar Icons-->
    <style name="ActionButtonStyle" parent="Widget.AppCompat.ActionButton">
        <item name="android:minWidth">0dip</item>
        <item name="android:maxWidth">50dip</item>
        <item name="android:paddingLeft">0dip</item>
        <item name="android:paddingRight">0dip</item>
    </style>

那就是它。你完成了。

答案 4 :(得分:3)

在appTheme中添加

<item name="actionButtonStyle">@style/CustomActionButtonStyle</item>

然后在style.xml中创建此样式

<style name="CustomActionButtonStyle" parent="Widget.AppCompat.ActionButton">
        <item name="android:paddingStart">0dip</item>
        <item name="android:paddingEnd">0dip</item>
    </style>

答案 5 :(得分:1)

我认为你可能会发现,如果没有极端的hackish或只是创建自己的自定义ActionBar,这很难完成。 See here似乎是一个非常相似的问题。我做了一些测试我自己覆盖android:actionButtonStyle,虽然我能够覆盖某些东西(如背景),但它拒绝遵守我指定的任何类型的填充属性。

答案 6 :(得分:1)

这些答案都不适合我。所以我使用图层列表将图标包装在一个可绘制的xml中,并给它一个负的左边距,这对我有用。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:left="-20dp">
        <bitmap
            android:src="@drawable/actionbar_logo"
            android:gravity="left" />
    </item>
</layer-list>

答案 7 :(得分:0)

如果要创建自定义ActionBar,可以在元素之间添加自定义间距,如果要将项目移动到彼此更近,则可以对属性使用负值。像这个伪代码(在你的布局xml文件中):

<ImageView 
android:layout_marginLeft="-2dp"