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

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

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

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

Благодаря 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> 

Для версий 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> 

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

Вот и все. Вы сделали.

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

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

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

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

 <ImageView android:layout_marginLeft="-2dp"