Quelqu'un sait-il comment définir le remplissage entre l'icône d'accueil de l'ActionBar et le titre?
Quelqu'un sait-il comment définir le remplissage entre l'icône d'accueil de l'ActionBar et le titre?
Réponses:
J'ai adapté la réponse de Cliffus et assigné le logo-drawable dans ma définition de style de barre d'action, 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>
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_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 dessinable en tant que LOGO , et non en tant qu'icône de votre application, comme l'ont fait certains commentateurs.
Créez simplement un XML dessinable et placez-le dans le dossier de ressources "drawable" (sans aucune 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 dessinable comme logo dans votre manifeste (ou sur l'objet Actionbar 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 sur chaque activité en fonction du contenu.
Donc cela a fonctionné pour moi.
actionBar.setTitle(" " + yourActivityTitle);
Si tout ce que vous voulez, c'est l'espacement, c'est la solution la plus simple à laquelle je puisse penser.
app:titleMarginStart
attribut dans le XML de mise en page.
C'est ainsi que j'ai pu définir le remplissage 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 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>
Cependant, si vous cherchez à atteindre cet objectif 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 réelle 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
padding
, il semble utiliser marginEnd
depuis l'api 17 - ce qui cassera probablement cette solution. Voir le mien ci
Il s'agit d'une question courante dans la conception de matériaux, car vous souhaiterez peut-être 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 mise en page 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:
app:titleMarginStart="dimension"
pour cibler le titre directement.
contentInsetStart
met un espace entre l'icône d'accueil et le titre, la réponse pourrait au moins le dire. Mon test tout à l'heure avec contentInsetStart
semblait mettre l'espace avant le logo (ce qui n'est certes pas le même que l'icône d'accueil).
Pour moi, seule la combinaison suivante a fonctionné, testée de l'API 18 à 24
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:contentInsetStartWithNavigation="0dp"
où dans "app" se trouve: 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 vous pouvez créer un nouveau fichier de mise en page pour votre barre d'outils. Dans ce cas, il vous suffit d'importer @id de votre barre d'outils en utilisant la propriété include sur chaque vue nécessaire.
<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 des titleMarginStart
œuvres 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 ceci:
mToolbar = FindViewById<SupportToolbar>(Resource.Id.toolbar);
SetSupportActionBar(mToolbar);
SupportActionBar.SetLogo(Resource.Drawable.titleicon32x32);
SupportActionBar.SetDisplayShowHomeEnabled(true);
SupportActionBar.SetDisplayUseLogoEnabled(true);
SupportActionBar.Title = "App title";
J'utilise une image personnalisée au lieu du texte du titre par défaut à droite du logo de mes applications. Ceci est configuré par programme comme
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 pour moi sont que la suggestion de @ Cliffus ne fonctionne pas pour moi en raison des problèmes que d'autres ont décrits dans les commentaires et bien que le paramètre de remplissage programmatique @dushyanth ait fonctionné dans le passé, je pense que le fait que l'espacement est maintenant défini en utilisant android:layout_marginEnd="8dip"
depuis l'API 17 la configuration manuelle du remplissage ne devrait avoir aucun effet. Voir le lien qu'il a posté sur git pour vérifier son état actuel.
Une solution simple pour moi est de définir une marge négative sur ma vue personnalisée dans la barre d'action, comme ceci android:layout_marginLeft="-14dp"
. Un test rapide montre que cela fonctionne pour moi sur 2.3.3 et 4.3 en utilisantActionBarCompat
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 sur 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 eu un problème similaire, mais avec un espacement entre le haut et l'icône / le logo de l'application personnalisée dans la barre d'action. La solution de Dushyanth de réglage du rembourrage a fonctionné par programme pour moi (réglage du rembourrage sur l'icône d'application / logo). J'ai essayé de trouver android.R.id.home ou R.id.abs__home ( ActionBarSherlock uniquement , car cela garantit la compatibilité descendante), et cela semble fonctionner sur les appareils 2.3-4.3 sur lesquels j'ai testé.
Pour mon cas, c'est avec la barre d'outils 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!
Vous pouvez changer 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 la bonne réponse, car vous ne pouvez pas choisir le côté de remplissage et la mise à l'échelle de l'icône DrawerArrow lorsque vous modifiez drawableSize (drawableSize = width = height). Mais vous pouvez vous éloigner de la gauche. À la marge de la droite faire
findViewById(android.R.id.home).setPadding(10, 0, 5, 0);
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);
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 à la getSupportActionBar().setIcon(R.drawable.logo)
place:
getSupportActionBar().setLogo(R.drawable.logo)
J'ai utilisé AppBarLayout
et coutume de le ImageButton
faire.
<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 code Java:
findViewById(R.id.appbar).bringToFront();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
getSupportActionBar().setDisplayShowTitleEnabled(false);
Vous pouvez également y parvenir par la méthode:
Drawable d = new InsetDrawable(getDrawable(R.drawable.nav_icon),0,0,10,0);
mToolbar.setLogo(d);
Dans votre XML, définissez la vue app:titleMargin
de votre 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
ce travail pour moi d'ajouter un rembourrage au titre et pour l' ActionBar
icône, je l'ai défini par programme.
getActionBar().setTitle(Html.fromHtml("<font color='#fffff'> Boat App </font>"));
<string name="app_name">" "Brick Industry</string>
Ajoutez simplement " "
le nom de votre application.Il ajoutera un espace entre l'icône et le titre