web-dev-qa-db-fra.com

Rembourrage entre l'icône d'accueil et le titre de la barre Action

Quelqu'un sait-il comment définir le remplissage entre l'icône d'accueil de la barre Action et le titre?

107
Alesqui

J'ai adapté Cliffus answer et assigné le logo pouvant être dessiné dans la définition de style de ma barre d'actions, comme dans res/style.xml, par exemple:

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

Le dessinable ressemble à celui de Cliffus (ici avec l’icône du lanceur d’application par défaut) dans res/drawable/actionbar_space_between_icon_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". Toute définition de logo différente ici est visible dans les activités sans barre d'action.

69
Minsky

EDIT : assurez-vous de définir ce dessin comme: LOGO , pas comme icône de votre application comme certains des commentateurs l'ont fait.

Il suffit de créer un fichier XML dessinable et de le placer dans le dossier de ressources "dessinable" (sans densité ni 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 Barre d’action de votre activité).

Bonne chance!

99
Cliffus

J'ai également rencontré un problème similaire. Dans mon cas, je devais définir des titres de manière dynamique pour chaque activité en fonction du contenu.

Donc cela a fonctionné pour moi.

actionBar.setTitle("  " + yourActivityTitle);

Si vous ne voulez que l’espacement, c’est la solution la plus simple à laquelle je puisse penser.

53
Rahul Sainani

C’est ainsi que j’ai pu régler le remplissage entre l’icône home et le titre.

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

Je ne pouvais pas trouver un moyen de personnaliser cela via les styles xml ActionBar. Autrement dit, 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 souhaitez y parvenir via XML, ces deux liens peuvent 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 disposition utilisée pour afficher l'icône de la maison dans une barre d'action) https://github.com/Android/platform_frameworks_base/blob/master/core/res/layout/action_bar_home.xml =

40
Dushyanth

Il s'agit d'une question courante dans la conception de matériaux, car vous pouvez aligner le titre de votre barre d'outils avec le contenu du fragment ci-dessous. Pour ce faire, vous pouvez remplacer le remplissage par défaut de "12dp" en utilisant l'attribut contentInsetStart = "72dp" dans votre présentation toolbar.xml, comme indiqué ci-dessous.

toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="@color/app_theme_color"
    app:contentInsetStart="72dp"/>

Puis dans votre activité, appelez

Toolbar toolbar = (Toolbar) activity.findViewById(R.id.toolbar);
toolbar.setTitle("Title Goes Here");

Et vous vous retrouvez avec ceci:

Toolbar

31
themichaelscott

Pour moi, seule la combinaison suivante a fonctionné, testée de l'API 18 au 24

app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"

où dans "app" est: xmlns:app="http://schemas.Android.com/apk/res-auto"

par exemple.

 <Android.support.v7.widget.Toolbar
                Android:id="@+id/toolbar"
                Android:layout_width="match_parent"
                Android:layout_height="?attr/actionBarSize"
                Android:background="@color/SE_Life_Green"
                app:contentInsetLeft="0dp"
                app:contentInsetStart="0dp"
                app:contentInsetStartWithNavigation="0dp"
                >
                .......
                .......
                .......
            </Android.support.v7.widget.Toolbar>
29
Ajit

Si vous utilisez la barre d'outils d'AppCompat (Android.support.v7.widget.Toolbar,> = révision 24, juin 2016), le remplissage entre l'icône et le titre peut être modifié avec la valeur suivante:

  app:contentInsetStartWithNavigation="0dp"

Pour améliorer ma réponse, vous pouvez l'utiliser sur votre barre d'outils directement dans votre activité ou créer un nouveau fichier de mise en page pour votre barre d'outils. Dans ce cas, il vous suffit d'importer le @id de votre barre d'outils à l'aide de la propriété include de chaque vue requise.

<Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/actionBarSize"
    Android:elevation="4dp"
    app:contentInsetLeft="0dp"
    app:contentInsetStart="0dp"
    app:contentInsetStartWithNavigation="0dp">
</Android.support.v7.widget.Toolbar>

Vous pouvez ensuite importer votre mise en page sur votre activity.xml

<include
        layout="@layout/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"/>
28
tryp

Utiliser titleMarginStart fonctionne pour moi. Exemple Xamarin:

<Android.support.v7.widget.Toolbar
  xmlns:app="http://schemas.Android.com/apk/res-auto"
  Android:id="@+id/toolbar"
  Android:layout_height="wrap_content"
  Android:layout_width="match_parent"
  Android:minHeight="?attr/actionBarSize"
  Android:background="?attr/colorPrimary"
  app:titleMarginStart="24dp"/>

Définissez le logo comme suit:

mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar);
SetSupportActionBar(mToolbar);
SupportActionBar.SetLogo(Resource.Drawable.titleicon32x32);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayUseLogoEnabled(true);
SupportActionBar.Title = "App title";
5
Druid

J'ai utilisé avant le titre et j'ai travaillé pour moi.

4
Zanini

J'utilise une image personnalisée au lieu du titre par défaut, à droite du logo de mes applications. Ceci est mis en place par programme comme

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

La suggestion de @ Cliffus ne me convient pas, à cause des problèmes que d'autres ont soulignés dans les commentaires. Bien que le paramètre de remplissage programmatique de @dushyanth ait pu fonctionner dans le passé, je pense que le fait que l'espacement soit correct maintenant défini en utilisant Android:layout_marginEnd="8dip" depuis l’API 17, la définition manuelle du remplissage ne doit pas avoir d’effet. Voir le lien qu'il a posté à git pour vérifier son état actuel.

Une solution simple pour moi consiste à définir une marge négative sur ma vue personnalisée dans la barre d’action, comme si 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 aide quelqu'un!

2
Dori

J'ai résolu ce problème en utilisant une disposition de navigation personnalisée

En l'utilisant, vous pouvez personnaliser n'importe quoi dans le titre de la barre d'action:

build.gradle

dependencies {
    compile 'com.Android.support:appcompat-v7:21.0.+'
    ...
}

AndroidManifest.xml

<application
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name">
        <activity
            Android:name=".MainActivity"
            Android:theme="@style/ThemeName">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>

styles.xml

<style name="ThemeName" parent="Theme.AppCompat.Light">
   <item name="actionBarStyle">@style/ActionBar</item>
   <item name="Android:actionBarStyle" tools:ignore="NewApi">@style/ActionBar</item>
<style name="ActionBar" parent="Widget.AppCompat.ActionBar">
   <item name="displayOptions">showCustom</item>
   <item name="Android:displayOptions" tools:ignore="NewApi">showCustom</item>

    <item name="customNavigationLayout">@layout/action_bar</item>
   <item name="Android:customNavigationLayout" tools:ignore="NewApi">@layout/action_bar</item>

    <item name="background">@color/Android:white</item>
   <item name="Android:background">@color/Android:white</item>

action_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
          Android:id="@+id/action_bar_title"
          Android:layout_width="wrap_content"
          Android:layout_height="wrap_content"
          Android:gravity="center_vertical"
          Android:drawableLeft="@drawable/ic_launcher"
          Android:drawablePadding="10dp"
          Android:textSize="20sp"
          Android:textColor="@Android:color/black"
          Android:text="@string/app_name"/>
2
mc.dev

J'ai utilisé cette méthode setContentInsetsAbsolute(int contentInsetLeft, int contentInsetRight) et ça marche!

int padding = getResources().getDimensionPixelSize(R.dimen.toolbar_content_insets);
mToolbar.setContentInsetsAbsolute(padding, 0);
0
THANN Phearum

Vous pouvez modifier drawableSize de votre DrawerArrow comme ceci:

<style name="MyTheme" parent="Android:Theme.WithActionBar">
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>

<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="barLength">24dp</item>
    <item name="arrowShaftLength">24dp</item>
    <item name="arrowHeadLength">10dp</item>
    <item name="drawableSize">42dp</item> //this is your answer
</style>

Ce n'est pas une réponse correcte, car vous ne pouvez pas choisir le côté de remplissage et l'icône de l'échelle DrawerArrow lorsque vous modifiez drawableSize (drawableSize = width = height). Mais vous pouvez vous éloigner de gauche. À la marge de droite faire

findViewById(Android.R.id.home).setPadding(10, 0, 5, 0);
0
Andriy Fediv

J'ai utilisé AppBarLayout et custom ImageButton do to do.

<Android.support.design.widget.AppBarLayout
    Android:id="@+id/appbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    app:elevation="0dp"
    Android:background="@Android:color/transparent"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

   <RelativeLayout
       Android:layout_width="match_parent"
       Android:layout_height="match_parent">

       <ImageView
           Android:layout_width="32dp"
           Android:layout_height="32dp"
           Android:src="@drawable/selector_back_button"
           Android:layout_centerVertical="true"
           Android:layout_marginLeft="8dp"
           Android:id="@+id/back_button"/>

       <Android.support.v7.widget.Toolbar
           Android:id="@+id/toolbar"
           Android:layout_width="match_parent"
           Android:layout_height="?attr/actionBarSize"
           app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
    </RelativeLayout>    
</Android.support.design.widget.AppBarLayout>

Mon Java:

findViewById(R.id.appbar).bringToFront();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
getSupportActionBar().setDisplayShowTitleEnabled(false);
0
Nouman Ch

J'avais un problème similaire mais avec un espacement entre l'icône/le logo de l'application personnalisée et supérieure dans la barre d'action. La solution de réglage du rembourrage de Dushyanth a fonctionné de manière programmée pour moi (réglage du rembourrage sur l'icône de l'application/du logo). J'ai essayé de trouver soit Android.R.id.home ou R.id.abs__home (ActionBarSherlock uniquement, car cela garantit la compatibilité ascendante), et cela semble fonctionner sur les appareils 2.3-4.3 sur lesquels j'ai testé.

0
raptors

Pour mon cas, c'est avec Toolbar que je l'ai résolu comme ceci:

ic_toolbar_drawble.xml

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
    Android:drawable="@drawable/ic_toolbar"
    Android:right="-16dp"
    Android:left="-16dp"/>
</layer-list>

Dans mon fragment, je vérifie l'api:

if (Android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop)
      toolbar.setLogo(R.drawable.ic_toolbar);
else
      toolbar.setLogo(R.drawable.ic_toolbar_draweble);

Bonne chance!

0
Context

Lorsque vous utilisez une barre d’outils personnalisée, vous pouvez utiliser

toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(R.string.activity_title);
setSupportActionBar(toolbar);
getSupportActionBar().setLogo(R.drawable.logo);

et dans la disposition de votre barre d'outils, définissez simplement app:titleMarginStart="16dp"

Notez que vous devez définir l'icône en tant que logo, n'utilisez pas getSupportActionBar().setIcon(R.drawable.logo) à la place, utilisez: getSupportActionBar().setLogo(R.drawable.logo)

0
Martin Schüller

Vous pouvez également obtenir la même chose par la méthode suivante:

Drawable d = new InsetDrawable(getDrawable(R.drawable.nav_icon),0,0,10,0);
mToolbar.setLogo(d);
0
E Player Plus

Dans votre XML, définissez le app:titleMargin dans votre vue Barre d’outils comme suit:

<androidx.appcompat.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            app:titleMarginStart="16dp"/>

Ou dans votre code:

toolbar.setTitleMargin(16,16,16,16); // start, top, end, bottom
0
Ahmed Ashour