44 votes

Existe-t-il un moyen de réduire l'espacement entre les icônes des éléments d'action dans la barre d'action ?

Je voulais réduire l'espacement entre les icônes des éléments d'action ajoutés à la barre d'action. Existe-t-il un moyen de le faire ?

1 votes

La réponse du haut me semble assez bonne - y a-t-il une raison pour laquelle elle n'a pas été acceptée ?

67voto

shai Points 587

Utiliser un Android:actionButtonStyle personnalisé.

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

et la magie est là :

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

Normalement, la largeur minimale est fixée à 56 dip.

0 votes

Ne fonctionne pas pour moi au niveau 11 de l'API. Fonctionne dans les niveaux 14+ de l'API.

6 votes

Pour travailler avec les anciennes API, nous devons également définir <item name="actionButtonStyle">@style/ActionButtonStyle</item>.

0 votes

Notez que la définition de Android:minWidth à 0 provoque des crashs lors d'une pression longue sur le texte d'édition dans certaines situations. (sur certains appareils populaires comme le SGSII)

17voto

pedroca Points 41

Pour les versions SDK 17+, vous devez utiliser les propriétés paddingStart et paddingEnd, si vous avez minSdkVersion < 17, vous devez utiliser des styles différents pour chaque version, comme ceci :

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>

1 votes

Cela devrait être l'approche correcte pour remplacer le rembourrage pour les périphériques 17+. Merci.

0 votes

Celui-là a marché pour moi ! Au cas où ça aiderait, j'ai ajouté <item name="android:actionButtonStyle">@style/ActionButtonStyle</i‌​tem> juste une fois dans mon <style name="AppTheme" parent="Theme.AppCompat.Light"> élément de res/values/styles.xml . Puis on a ajouté le <style name="ActionButtonStyle" ... dans les deux versions styles.xml des fichiers. Android choisira la définition correcte de @style/ActionButtonStyle en fonction de la version de la plate-forme.

0 votes

Pour corriger mon commentaire précédent : J'ai en fait ajouté <item name="actionButtonStyle">@style/ActionButtonStyle</item> (dans la version par défaut styles.xml y <style name="ActionButtonStyle" parent="Widget.AppCompat.ActionButton"> dans les deux styles.xml (par défaut et v17). Voir cette réponse .

15voto

Robert Hilse Points 171

Merci à Shai pour son astuce, qui fonctionne assez bien pour moi (sur un appareil Android 4.0.x) : (mon style.xml complet)

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

11voto

Sagar Shah Points 824

Pour supporter une ancienne version en utilisant appCompat, vous n'avez besoin que de cela :

Dans l'appTheme de votre application :

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

et créer un style dans 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>

C'est ça. Vous avez terminé.

0 votes

Pour que cela fonctionne dans les versions 17 et supérieures, j'ai également ajouté l'option res/values-v17/styles.xml version avec paddingStart y paddingEnd comme La réponse de pedroca suggère.

0 votes

Le secret est le <item name="Android:maxWidth">30dp</item>.

5voto

Dans appTheme, ajoutez

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

et ensuite dans style.xml créer ce style

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X