Подтвердить что ты не робот

Есть ли способ уменьшить расстояние между значками элементов действия на панели действий?

Я хотел уменьшить расстояние между значками Action Item, добавленными в ActionBar. Есть ли способ, которым мы можем это сделать?

4b9b3361

Ответ 1

используйте пользовательский андроид: 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.

Ответ 2

Благодаря Shai для его подсказки, это очень хорошо работает для меня (на устройстве Android 4.0.x): (весь мой стиль .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

Для SDK версий 17+ вы должны использовать свойства paddingStart и paddingEnd, если у вас есть minSdkVersion < 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>

Ответ 4

Для поддержки старой версии с помощью 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>

Что это. Вы закончили.

Ответ 5

В 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>

Ответ 6

Я думаю, вы можете обнаружить, что этого трудно добиться, не становясь крайне хакерским или просто создавая собственный пользовательский ActionBar. Смотрите здесь, что похоже на довольно похожий вопрос. Я сам тестировал сам переопределяющий андроид: actionButtonStyle, и хотя мне удалось переопределить некоторые вещи (например, фон), он отказался соблюдать любые атрибуты заполнения, указанные мной.

Ответ 7

Ни один из ответов не работал у меня. Поэтому я обернул значок в drawable 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>

Ответ 8

Если вы создаете пользовательский ActionBar, вы можете добавить пользовательский интервал между элементами, если вы хотите перемещать объекты ближе друг к другу, вы можете использовать отрицательные значения для ваших атрибутов. Как этот псевдокод (в вашем XML файле макета):

<ImageView 
android:layout_marginLeft="-2dp"