Donc, je viens de mettre à jour mon code à Lollipop, et j’ai des problèmes avec la barre d’action. J’utilise AppCompat et ActionBarActivity et gonfle une vue personnalisée. Il semble que la vue personnalisée ne prenne plus toute la largeur de l’écran, laissant une fine bande à gauche
Comme il avait l’air
Il ressemble maintenant
C’est le code que j’utilise pour configurer la barre d’action. Quelqu’un a des idées?
final ActionBar actionBar = getSupportActionBar(); if(actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayShowCustomEnabled(true); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setCustomView(R.layout.action_bar_content_search_custom_view); actionBar.setBackgroundDrawable(null); // actionBar.setStackedBackgroundDrawable(null); TextView title = (TextView) actionBar.getCustomView().findViewById(R.id.action_bar_title); title.setText(R.ssortingng.youtube); ImageView back = (ImageView) actionBar.getCustomView().findViewById(R.id.action_bar_back); back.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); }
modifier
Prendre la vue personnalisée et modifier l’arrière-plan prend désormais toute la largeur. Le problème est donc de savoir comment un CustomView peut occuper toute la largeur de l’ActionBar.
Il semble que cela soit dû aux dernières modifications apscopes à ActionBar
dans la récente mise à jour de appcompat-v7
. Il semble qu’il y ait des changements importants dans la façon dont vous devez gérer les barres d’action.
J’ai rencontré le même problème et après avoir lu la documentation d’ ActionBar
, et en particulier la citation suivante, j’ai trouvé une solution.
À partir d’Android L (niveau 21 de l’API), la barre d’action peut être représentée par n’importe quel widget de la barre d’outils dans la présentation de l’application. L’application peut signaler à l’activité que la barre d’outils doit être traitée comme la barre d’action de l’activité. Les activités qui utilisent cette fonctionnalité doivent utiliser l’un des thèmes .NoActionBar fournis, définir l’atsortingbut windowActionBar sur false ou ne pas demander la fonctionnalité de fenêtre.
À mon avis, les thèmes AppCompat
ont été modifiés et, d’une part, semblaient briser quelques points, mais apportaient beaucoup plus de souplesse. Je recommande de suivre ces étapes:
.NoActionBar
dans votre activité comme décrit dans la citation ci-dessus android.support.v7.widget.Toolbar
à votre disposition d’activité app:contentInsetStart="0dp"
. Ceci est le problème principal avec la marge que vous décrivez dans votre question
Il est généralement recommandé de le faire dans un fichier de mise en page distinct et d’utiliser include
dans la mise en page de votre activité afin de personnaliser la barre d’outils en un seul endroit si vous l’utilisez dans plusieurs activités.
findViewById
et setSupportActionBar
dans votre activité onCreate
pour signal to the Activity which Toolbar should be treated as the Activity's action bar
Toolbar actionBar = (Toolbar) findViewById(R.id.actionBar); setSupportActionBar(actionBar);
onCreateOptionsMenu
seront ajoutées à la barre d’outils et seront traitées comme la barre d’action d’activité. Au lieu de faire beaucoup de travail comme mentionné par Muzikant et aimer cette réponse
getSupportActionBar().setDisplayShowHomeEnabled(false); getSupportActionBar().setDisplayShowTitleEnabled(false); getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE)); LayoutInflater mInflater = LayoutInflater.from(this); View mCustomView = mInflater.inflate(R.layout.action_bar_home, null); getSupportActionBar().setCustomView(mCustomView); getSupportActionBar().setDisplayShowCustomEnabled(true); Toolbar parent =(Toolbar) mCustomView.getParent();//first get parent toolbar of current action bar parent.setContentInsetsAbsolute(0,0);// set padding programmatically to 0dp
Vous devez append uniquement les deux dernières lignes de code pour résoudre votre problème.
J’espère que cela pourrait vous aider et aider quelqu’un d’autre.
MISE À JOUR: Après avoir fait des recherches à ce sujet, j’ai trouvé que cette solution ne fonctionnera pas dans certains cas. L’espace latéral gauche (HOME ou BACK) sera supprimé, mais l’écart latéral droit (MENU) restra tel quel. Voici la solution dans ces cas.
View v = getSupportActionBar().getCustomView(); LayoutParams lp = v.getLayoutParams(); lp.width = LayoutParams.MATCH_PARENT; v.setLayoutParams(lp);
Ajoutez ces quatre lignes au code ci-dessus, de sorte que l’espace latéral droit soit également supprimé de la barre d’action du support.
Je pense que vous pouvez aussi le faire dans les styles. essaye ça. testé sur kitkat
Aucune des autres réponses ne fonctionnait pour moi, alors j’ai jeté un coup d’œil aux styles réels d’AppCompat v7, trouvés ici .
Si vous regardez le style Base.Widget.AppCompat.ActionBar, il a:
- @dimen/abc_action_bar_content_inset_material
- @dimen/abc_action_bar_content_inset_material
Il est donc évident que nous devons simplement remplacer ces propriétés dans notre propre style de barre d’action:
Cela a bien fonctionné pour moi, j’espère que cela aidera les autres aussi.
Je viens juste de rencontrer ce problème aujourd’hui, puis j’ai découvert que j’avais res/values-v21/styles.xml
dans mon projet qui était généré automatiquement par Android Studio et c’est la cause.
Pourquoi?
Parce que le contenu de mes res/values-v21/styles.xml
était:
Et mes res/values/styles.xml
contenaient quelque chose comme:
Ensuite, lorsque j’ai lancé mon application sur Lollipop, le res/values-v21/styles.xml
été utilisé, ce qui a causé un problème exact. Donc, je suis venu à une solution simple est de supprimer:
dans res/values-v21/styles.xml
Après avoir battu ma tête contre le moniteur, cela a fonctionné pour moi
Toolbar toolbar = (Toolbar) actionBar.getCustomView().getParent(); toolbar.setContentInsetStartWithNavigation(0); toolbar.setContentInsetEndWithActions(0); toolbar.setContentInsetsAbsolute(0, 0); toolbar.setPadding(0, 0, 0, 0);
Le getCustomView (). GetParent () est ce qui a fait l’affaire
jusqu’au point:
ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); actionBar.setCustomView(R.layout.actionbar_layout); Toolbar toolbar = (Toolbar) actionBar.getCustomView().getParent(); toolbar.setContentInsetsAbsolute(0, 0); toolbar.setPadding(0, 0, 0, 0);
assurez-vous d’importer la bonne barre d’outils – android.support.v7.widget.Toolbar;
Écrivez ces deux lignes en plus de votre code
Toolbar toolbar=(Toolbar)viewActionBar.getParent(); toolbar.setContentInsetsAbsolute(0,0);