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 ?
Ne fonctionne pas pour moi au niveau 11 de l'API. Fonctionne dans les niveaux 14+ de l'API.
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 ?
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.
Pour travailler avec les anciennes API, nous devons également définir <item name="actionButtonStyle">@style/ActionButtonStyle</item>.
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)
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>
Cela devrait être l'approche correcte pour remplacer le rembourrage pour les périphériques 17+. Merci.
Celui-là a marché pour moi ! Au cas où ça aiderait, j'ai ajouté <item name="android:actionButtonStyle">@style/ActionButtonStyle</item>
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.
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 .
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>
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é.
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.
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 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.
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 ?