112 votes

Remplissage entre l'icône d'accueil et le titre de l'ActionBar

Quelqu'un sait-il comment définir l'espacement entre l'icône d'accueil de l'ActionBar et le titre ?

14 votes

Bienvenue dans le monde des hackers : Android . Cette chose simple aurait dû être trouvée par n'importe qui (même un débutant) si nous avions eu besoin de cela dans d'autres techniques d'interface utilisateur et dans la programmation d'applications. Cependant, dans Android, c'est vraiment mystérieux. Ils intentionnellement cacher la fonction, la rendre compliquée et faire en sorte qu'Android devienne un outil de travail à part entière. un monde de hackers . Je ne sais pas quelle est leur finalité.

1 votes

Le présent question et les réponses donnent un moyen d'y parvenir avec des attributs dans la barre d'outils (support v7)

1 votes

Android est encore plus nul qu'iOS.

101voto

Cliffus Points 674

EDIT : assurez-vous que vous définissez ce dessin en tant que LOGO mais pas en tant qu'icône de l'application comme l'ont fait certains commentateurs.

Il suffit de créer un objet à dessiner en XML et de le placer dans le dossier de ressources "drawable" (sans aucune densité ou autre configuration).

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:drawable="@drawable/my_logo"
        android:right="10dp"/>

</layer-list>

La dernière étape consiste à définir ce nouveau dessin comme logo dans votre manifeste (ou sur l'objet Actionbar dans votre activité).

Bonne chance !

0 votes

Le padding ajouté à l'image modifie également l'icône du lanceur, ce qui n'est pas bon du tout =/

0 votes

C'est une solution efficace et propre ! Alesqui - Utilisez simplement une icône différente pour votre lanceur et votre barre d'action.

1 votes

Cette solution pose un gros problème. Je l'ai utilisée et @Alesqui a raison - l'icône de l'application a changé et est devenue plus petite... On peut changer d'icône mais comme le dp est différent selon les téléphones, cette solution n'est pas adaptée à une application de production.

70voto

Minsky Points 814

J'ai adapté la réponse de Cliffus et j'ai assigné le logo-drawable dans ma définition du style de l'actionbar, par exemple comme ceci dans res/style.xml :

<item name="android:actionBarStyle">@style/MyActionBar</item>

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">#3f51b5</item>
        <item name="android:titleTextStyle">@style/ActionBar.TitleText</item>
        <item name="android:textColor">#fff</item>
        <item name="android:textSize">18sp</item>
        <item name="android:logo">@drawable/actionbar_space_between_icon_and_title</item>
</style>

La table à dessin ressemble à celle de Cliffus (ici avec l'icône par défaut du lanceur d'applications) dans res/drawable/actionbar_space_between_icon_and_title.xml :

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

Dans le fichier android_manifest.xml, vous pouvez toujours définir une icône d'application différente (icône du lanceur sur le bureau). Tout logo différent défini ici est visible dans les activités sans barre d'action.

0 votes

Pourquoi il ne prend pas d'effet sur Android 5.1

0 votes

Désolé, je ne peux rien dire à ce sujet en 5.1. J'ai opté pour le contrôle de barre d'outils, plus souple. Si ce n'est pas déjà fait, je vous recommande d'ouvrir une nouvelle question ici sur StackOverflow et d'écrire quelques détails supplémentaires, ce qui a fonctionné pour vous (<5.1) et ce qui ne fonctionne pas et ce que vous avez essayé avec 5.1, mais n'avez pas trouvé de solution.

0 votes

Merci @Minsky, je me suis inspiré de votre réponse pour résoudre mon problème, j'ai mis comment dans la réponse ci-dessous :)

55voto

droidster Points 450

J'ai également été confronté à un problème similaire. Dans mon cas, j'ai dû définir des titres de manière dynamique pour chaque activité en fonction du contenu.

Cela a donc fonctionné pour moi.

actionBar.setTitle("  " + yourActivityTitle);

Si tout ce que vous voulez, c'est l'espacement, c'est la solution la plus simple à laquelle j'ai pensé.

13 votes

Pourquoi ce vote négatif ? Je ne pense pas qu'il s'agisse d'une mauvaise réponse, juste d'une autre façon de faire.

0 votes

Ce n'est pas du tout une façon propre de procéder. Oui, cela fonctionne, mais il en va de même pour les mises en page basées sur des tableaux en HTML. Demandez à n'importe quel développeur web et il vous dira que les mises en page basées sur des tableaux sont le signe d'un codage négligé ou inexpérimenté.

3 votes

@idratherbeintheair Oui, je suis d'accord que ce n'est pas la façon la plus "propre", donc il n'y a plus que la mention "plus facile". Mais quand vous mettez le doigt sur quelque chose, n'hésitez pas à poster une solution alternative. J'ai été confronté à ce problème et c'est ce que j'ai utilisé dans mon application, donc j'ai partagé.

40voto

Dushyanth Points 321

C'est ainsi que j'ai pu définir l'espacement entre l'icône d'accueil et le titre.

ImageView view = (ImageView)findViewById(android.R.id.home);
view.setPadding(left, top, right, bottom);

Je n'ai pas trouvé de moyen de personnaliser cela via les styles xml de l'ActionBar. C'est-à-dire que le XML suivant ne fonctionne pas :

<style name="ActionBar" parent="android:style/Widget.Holo.Light.ActionBar">        
    <item name="android:titleTextStyle">@style/ActionBarTitle</item>
    <item name="android:icon">@drawable/ic_action_home</item>        
</style>

<style name="ActionBarTitle" parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textSize">18sp</item>
    <item name="android:paddingLeft">12dp</item>   <!-- Can't get this padding to work :( -->
</style>

Toutefois, si vous cherchez à atteindre cet objectif par le biais de xml, ces deux liens pourraient vous aider à trouver une solution :

https://github.com/Android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml

(Il s'agit de la mise en page utilisée pour afficher l'icône d'accueil dans une barre d'action) https://github.com/Android/platform_frameworks_base/blob/master/core/res/res/layout/action_bar_home.xml

1 votes

@Dushyanth Je viens d'essayer mais il y a une exception de pointeur nul sur l'imageview. J'ai à la fois homeUpIndicator et l'icône de la maison dans la barre d'action.

1 votes

Cela ne fonctionne que pour l'API >= 11 car Android.R.id.home a été introduit dans l'API 11. J'utilise actionbarcompat pour avoir une actionbar aussi sur les appareils pre honeycomp. Comment le gérer dans ce cas ?

0 votes

Un peu de piratage. Voir la réponse de Cliffus ci-dessous pour une solution plus propre.

2voto

Dori Points 4011

J'utilise une image personnalisée à la place du texte de titre par défaut à droite du logo de mon application. Ceci est configuré par programme comme suit

    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setDisplayUseLogoEnabled(true);
    actionBar.setCustomView(R.layout.include_ab_txt_logo);
    actionBar.setDisplayShowCustomEnabled(true);

Les problèmes avec les réponses ci-dessus sont que la suggestion de @Cliffus ne fonctionne pas pour moi en raison des problèmes que d'autres ont soulignés dans les commentaires et bien que le réglage programmatique de l'espacement de @dushyanth ait pu fonctionner dans le passé, je pense que le fait que l'espacement soit maintenant réglé à l'aide de la fonction android:layout_marginEnd="8dip" depuis l'API 17, le réglage manuel de l'espacement ne devrait pas avoir d'effet. Voir le lien qu'il a posté vers git pour vérifier son état actuel.

Une solution simple consiste à définir une marge négative sur ma vue personnalisée dans la barre d'action, comme suit android:layout_marginLeft="-14dp" . Un test rapide montre que cela fonctionne pour moi sur 2.3.3 et 4.3 en utilisant ActionBarCompat

J'espère que cela aidera quelqu'un !

0 votes

@Diri peut-elle ajouter plus de choses ? Peut-on faire une barre d'action en haut, en bas, à gauche, à droite ?

0 votes

@amitsharma - Je ne suis pas sûr de ce que vous voulez dire exactement - voulez-vous dire déplacer la barre d'action du haut de l'écran ? Si c'est le cas, je pense qu'il faudrait créer une vue personnalisée de la barre d'action pour faire cela - il semble que ce ne soit pas un bon ux cependant :)

0 votes

Dans ce cas, je ne vois pas ce que vous voulez dire par "pouvons-nous en ajouter d'autres ? pouvons-nous avoir une barre d'action en haut, en bas, à gauche, à droite ?

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