J'utilise une vue de barre d'actions personnalisée et, comme vous pouvez le constater dans la capture d'écran ci-dessous, la barre d'action contient un espace gris. Je veux l'enlever.
Qu'est-ce que j'ai fait:
res/values-v11/styles.xml
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
<item name="Android:actionBarStyle">@style/ActionBarStyle</item>
<item name="actionBarStyle">@style/ActionBarStyle</item>
</style>
res/values / my_custom_actionbar.xml
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
<style name="ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
<item name="Android:height">60dp</item>
</style>
</resources>
Manifeste
<uses-sdk
Android:minSdkVersion="10"
Android:targetSdkVersion="19" />
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/AppName"
Android:theme="@style/AppBaseTheme" >
<!-- activities... etc -->
</application>
Activité principale
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
ActionBar actionbar = getSupportActionBar();
actionbar.setDefaultDisplayHomeAsUpEnabled(false);
actionbar.setDisplayHomeAsUpEnabled(false);
actionbar.setDisplayShowCustomEnabled(true);
actionbar.setDisplayShowHomeEnabled(false);
actionbar.setDisplayShowTitleEnabled(false);
actionbar.setDisplayUseLogoEnabled(false);
actionbar.setHomeButtonEnabled(false);
// Add the custom layout
View view = LayoutInflater.from(this).inflate(R.layout.actionbar, null, false);
actionbar.setCustomView(view);
}
J'ai trouvé un article récent qui indique qu'il y a un problème avec la dernière version. J'ai également mis à jour ADT et SDK sur Android 5.
La vue personnalisée de la barre d'action Android ne remplit pas le parent
Je ne sais pas ce que je devrais faire.
Edit (solution partielle):
Ne fonctionne pas sur Android <= API 10.
Android Lollipop, la vue personnalisée AppCompat ActionBar ne prend pas toute la largeur de l'écran
Qu'est-ce que j'ai changé:
Utilisez la dernière version de sdk:
<uses-sdk
Android:minSdkVersion="10"
Android:targetSdkVersion="21" />
Ajouter une toolbarStyle
:
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
<item name="Android:actionBarStyle">@style/ActionBarStyle</item>
<item name="actionBarStyle">@style/ActionBarStyle</item>
<item name="Android:toolbarStyle">@style/ToolbarStyle</item>
<item name="toolbarStyle">@style/ToolbarStyle</item>
</style>
<style name="ToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
<item name="Android:contentInsetStart">0dp</item>
</style>
Si vous ajoutez la variable Toolbar
via XML, vous pouvez simplement ajouter des attributs XML pour supprimer les incrustations de contenu.
<Android.support.v7.widget.Toolbar
xmlns:app="schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@color/primaryColor"
Android:contentInsetLeft="0dp"
Android:contentInsetStart="0dp"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
Android:contentInsetRight="0dp"
Android:contentInsetEnd="0dp"
app:contentInsetRight="0dp"
app:contentInsetEnd="0dp" />
essaye ça:
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
View customView = getLayoutInflater().inflate(R.layout.main_action_bar, null);
actionBar.setCustomView(customView);
Toolbar parent =(Toolbar) customView.getParent();
parent.setPadding(0,0,0,0);//for tab otherwise give space in tab
parent.setContentInsetsAbsolute(0,0);
J'ai utilisé ce code dans mon projet, bonne chance;
L'encart gauche est provoqué par la variable contentInsetStart
de la barre d'outils, qui est par défaut 16dp.
Changez-le pour vous aligner sur la ligne de touche.
Mise à jour de la bibliothèque de support v24.0.0:
Pour correspondre à la spécification Material Design, un attribut supplémentaire, contentInsetStartWithNavigation
, par défaut, 16dp. Changer ceci si vous avez aussi une icône de navigation.
Il s'est avéré que cela fait partie d'une nouvelle spécification de conception de matériel introduite dans la version 24 de Design Library.
https://material.google.com/patterns/navigation.html
Toutefois, il est possible de supprimer l'espace supplémentaire en ajoutant la propriété suivante au widget Barre d'outils.
app:contentInsetStartWithNavigation="0dp"
J'ai trouvé une autre résolution (référence appcompat-v7) modifiant le toolbarStyle, code suivant:
<item name="toolbarStyle">@style/Widget.Toolbar</item>
<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
</style>
<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
Android:paddingLeft="0dp">
Cela devrait suffire.
Il suffit de modifier vos styles.xml
<!-- ActionBar styles -->
<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>
Au lieu d'ajouter une barre d'outils dans la présentation, vous pouvez définir votre vue personnalisée comme indiqué ci-dessous.
Toolbar parent = (Toolbar) customView.getParent();
parent.setContentInsetsAbsolute(0,0);
Ajoutez seulement app:contentInsetStart="0dp"
à la barre d’outils et supprimez cet espace.
Donc, votre définition de barre d'outils ressemble à ceci
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
app:contentInsetStart="0dp"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
et ça ressemble à ça
Vous devez ajouter cette ligne app2: contentInsetStart = "0dp" dans votre barre d'outils
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app2="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="@color/colorPrimary"
app2:contentInsetStart="0dp"/>
En utilisant AppCompatAcitivty
, vous pouvez utiliser simplement par
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
View logo = getLayoutInflater().inflate(R.layout.custom_toolbar, null);
mToolbar.addView(logo, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
mToolbar.setContentInsetsAbsolute(0,0);
Je n'ai trouvé aucune solution à mon problème (première photo) où que ce soit, mais j'ai finalement trouvé la solution la plus simple après quelques heures de recherche. Veuillez noter que j'ai essayé avec beaucoup d'attributs XML tels que app:setInsetLeft="0dp"
, etc., mais aucun d'entre eux n'a été utile dans ce cas.
le code suivant a résolu ce problème comme dans l'image 2
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//NOTE THAT: THE PART SOLVED THE PROBLEM.
Android.support.design.widget.AppBarLayout abl = (AppBarLayout)
findViewById(R.id.app_bar_main_app_bar_layout);
abl.setPadding(0,0,0,0);
}
Photo 2
La définition des attributs "contentInset ..." sur 0 dans la barre d'outils ne fonctionnait pas pour moi La solution de Nilesh Senta pour mettre à jour le style a fonctionné!
styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarStyle">@style/Actionbar</item>
<item name="Android:titleTextStyle">@style/ActionbarTitle</item>
</style>
<style name="Actionbar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>
Java (onCreate)
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
ActionBar.LayoutParams.MATCH_PARENT,
ActionBar.LayoutParams.MATCH_PARENT
);
View view = LayoutInflater.from(this).inflate(R.layout.actionbar_main, null);
actionBar.setCustomView(view, layoutParams);
Créer une barre d'outils comme ceci:
<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/menuToolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_margin="0dp"
Android:background="@color/white"
Android:contentInsetLeft="10dp"
Android:contentInsetRight="10dp"
Android:contentInsetStart="10dp"
Android:minHeight="?attr/actionBarSize"
Android:padding="0dp"
app:contentInsetLeft="10dp"
app:contentInsetRight="10dp"
app:contentInsetStart="10dp"></Android.support.v7.widget.Toolbar>
s'il vous plaît suivez ce lien pour plus - Conseils Android
ActionBar ab = getSupportActionBar();
ab.setDisplayShowHomeEnabled(true);
ab.setDisplayShowCustomEnabled(true);
setDisplayShowTitleEnabled(true);
View customView = getLayoutInflater().inflate(R.layout.activity_main,null); //here activity_main.xml is the GUI design file.
ab.setCustomView(customView);
Toolbar parent =(Toolbar) customView.getParent(); //use V7 Toolbar import
parent.setContentInsetsAbsolute(0, 0);
setPadding(5,0,0,0);
ab.setIcon(R.mipmap.ic_launcher);
Il serait préférable d’ajouter un élément d’arrière-plan dans le style de la barre d’actions de l’application afin de correspondre à la couleur d’arrière-plan de la barre d’actions personnalisée:
<item name="Android:background">@color/actionbar_bgcolor</item>
Après Android 6.0, la barre d’action dispose même d’un espace à droite et ne peut pas être définie. Ajoutez une marge droite en ajustant l’activité comme ceci: (le vue est la barre d'action personnalisée ou un bouton droit dedans)
int rightMargin = Build.VERSION.SDK_INT>=Build.VERSION_CODES.M ? 0 : 8; // may the same with actionbar leftMargin in px
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
p.setMargins(p.leftMargin, p.topMargin, rightMargin, p.bottomMargin);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
p.setMarginEnd(rightMargin);
}
view.setLayoutParams(p);
Le machenism de la barre d’action est juste supporté après l’application Android 3.0+. Si nous utilisons plutôt une barre d’outils (de support lib v7), nous devons la disposer dans chaque xml de chaque activité et régler le problème du chevauchement avec la barre d’état du système dans le périphérique Android 5.0 ou ultérieur.
ajouter seulement Android:padding="0dp"
travail pour moi
<Android.support.v7.widget.Toolbar
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="60dp"
Android:padding="0dp"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
La réponse correcte et la plus simple est sur un autre post, ceci:
Android Lollipop, la vue personnalisée AppCompat ActionBar ne prend pas toute la largeur de l'écran
Il est marqué comme correct et, après avoir essayé cela, je peux confirmer que cela fonctionne.
Vous pouvez simplement utiliser une disposition relative dans le groupe de vues de la barre d’outils de votre fichier xml et ajuster les positions des widgets selon vos besoins pour votre cas d’utilisation. Il est inutile de créer une disposition personnalisée, de la gonfler et de la joindre à la barre d’outils. Une fois cette opération effectuée dans votre code Java, utilisez setContentInsetsAbsolute (0,0) avec votre objet de barre d’outils avant de le définir en tant que barre d’action de support dans votre présentation.
Kotlin
supportActionBar?.displayOptions = ActionBar.DISPLAY_SHOW_CUSTOM;
supportActionBar?.setCustomView(R.layout.actionbar);
val parent = supportActionBar?.customView?.parent as Toolbar
parent?.setPadding(0, 0, 0, 0)//for tab otherwise give space in tab
parent?.setContentInsetsAbsolute(0, 0)
ce travail pour moi
toolbar.setPadding(0,0,0,0);
toolbar.setContentInsetsAbsolute(0,0);