ActionBar - vue personnalisée avec centrée ImageView, des Éléments d'Action sur les côtés
J'ai une obligation de centre de un logo personnalisé (à l'aide d'une ImageView) dans l'Actionbar pour la "Maison" de l'activité. Je suis à l'aide d'ABS pour ce projet. Ceci est très similaire à une autre question publiée sur S. O. (ActionBar logo centré et les éléments d'Action sur les côtés), mais je ne suis pas sûr si l'ImageView ou menu de recherche permet de faire une différence, que je ne suis pas d'obtenir les résultats que je suis à la recherche d' (une image centrée), ou si j'ai juste eu tort. En gros, j'ai mis une Icone sur la gauche, insérer l'affichage personnalisé dans le centre, et ont une icône de recherche sur la droite (OptionsMenu). L'image semble un peu à droite de l'icône, mais c'est toujours à gauche de la centrer. Tous les pointeurs sur la façon de centre d'une ImageView dans l'actionbar serait grandement apprécié.
Home.java:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
LayoutInflater inflater = (LayoutInflater) getSupportActionBar().getThemedContext()
.getSystemService(LAYOUT_INFLATER_SERVICE);
final View customActionBarView = inflater.inflate(
R.layout.actionbar_custom_view_home, null);
/* Show the custom action bar view and hide the normal Home icon and title */
final ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setIcon(R.drawable.ic_ab_som);
actionBar.setCustomView(customActionBarView);
actionBar.setDisplayShowCustomEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = new MenuInflater(this);
inflater.inflate(R.menu.search, menu);
return true;
}
res/layout/actionbar_custom_view_home.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center">
<ImageView
android:id="@+id/actionBarLogo"
android:contentDescription="@string/application_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:duplicateParentState="false"
android:focusable="false"
android:longClickable="false"
android:padding="@dimen/padding_small"
android:src="@drawable/logo_horizontal" />
</LinearLayout>
res/menu/search.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@id/search_item"
android:icon="?attr/action_search"
android:title="@string/search_label"
android:showAsAction="ifRoom|collapseActionView">
</item>
</menu>
- Jetez un oeil à ma question ici: stackoverflow.com/questions/23783381/...
Vous devez vous connecter pour publier un commentaire.
Expliqué:
La rose conteneur, est l'espace réel où vous pourrez ajouter de la vue.
Le truc en faisant des maths, au centre de la Vue (quoi que) pour le milieu.
Dans mon cas, le point de Vue a été un TextView. Voici ma méthode:
Mise en page:
Profiter.
RelativeLayout
et l'ajouter à la place de laTextView
dans le code ci-dessus). De toute façon vérifier la nouvelle Barre d'outils, qui peut remplacer le vieux ActionBar et le centrage des éléments dans l'actionbar est preety beaucoup straight-forward: antonioleiva.com/material-design-everywhereSi vous voulez imageview au Centre de l'ActionBar alors utiliser:
il suffit de remplacer
getActionBar();
àgetSupportActionBar();
dans le code ci-dessousvotre actionbar_custom_view_home.xml
Cacher Actionbar Icône
Remarque: pour les < 11 utilisation de l'API getSupportActionBar() et > 11 utilisation de l'API getActionBar()
ÉDITÉ: 02/03/16 pour Barre d'outils
.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowCustomEnabled(true);
doit être appelée aprèsactionBar.setCustomView
pour maintenir la bonne mise en page paramsNullPointerException
suractionBar.setCustomView(R.layout.actionbar_custom_view_home);
. Et oui, je l'ai remplacé R. layout.actionbar_custom_view_home avec mon propre nomJ'ai rencontré ce problème,voici ma solution:
L'ImageView dans votre code est centrée par rapport à la LinearLayout, de ne pas la Barre d'Action. Vous pouvez ajouter de la marge de gauche (android:layout_marginLeft) pour la mise en page pour ajuster la position de l'image.
Autre façon de faire n'est pas pour ajouter une icône d'action et des éléments à la Barre d'Action, mais d'utiliser une mise en page personnalisée avec l'icône et les boutons à l'intérieur. Mais vous aurez besoin de gérer des éléments d'action-vous dans ce cas.
Je suis confronté au même problème et je propose la solution suivante:
dans votre res/layout/actionbar_custom_view_home.xml modifier la largeur de la mise en page à wrap_content:
Obtenir la largeur de la barre d'action comme ceci:
Ajouter layoutListener à votre customActionBarView:
La seule chose que j'ai trouvé est de mettre (mettre à droite ou à gauche selon les besoins, ou les deux):
que j'ai trouvé ici:
http://sourcey.com/android-custom-centered-actionbar-with-material-design/
La fin de la partie, mais au cas où il permet à quiconque - utiliser une couche de liste et de le définir comme arrière-plan. Sinon, le logo sera centrage en fonction de l'espace restant, pas l'intégralité de la barre d'outils, comme Reinherd mentionne.
Vous pouvez utiliser une couche de liste avec un arrière-plan statique couleur, et une image avec la gravité ensemble vers le centre, comme ci-dessous. Espérons que cela aide!
de la barre d'outils.axml
toolbar_background.xml