Quelqu'un sait-il comment définir le remplissage entre l'icône d'accueil de la barre Action et le titre?
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.
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!
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.
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 =
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:
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>
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"/>
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";
J'ai utilisé avant le titre et j'ai travaillé pour moi.
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!
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"/>
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);
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);
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);
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é.
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!
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)
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);
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