Voici ma mise en page:
<Android.support.design.widget.AppBarLayout
<Android.support.design.widget.CollapsingToolbarLayout
...
<Android.support.v7.widget.Toolbar
...
/>
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
Je veux que le titre reste dans la barre d'outils, pas dans CollapsingToolbarLayout. J'ai donc changé mon code de:
mCollapsingToolbar = ...
mCollapsingToolbar.setTitle(title);
à:
mTitleBar = ...
setSupportActionBar(mTitleBar);
getSupportActionBar().setTitle(title);
Mais le titre n'est pas visible. Mon appareil est Nexus 6 5.1.0
Merci d'avance.
Mise à jour 1: J'ai changé le code pour cela, ça ne fonctionne toujours pas :(
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle(title);
getSupportActionBar().setDisplayShowTitleEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Mise à jour 2: Voici l'extrait de code pour ces trois vues:
private void setUpAppBarLayout() {
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.appbar_layout);
appBarLayout.setBackgroundColor(extractBackgroundColor());
}
private void setUpCollapsingToolbarLayout() {
if (null == mCollapsingToolbar) {
mCollapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
}
}
private void setUpToolbar(String title) {
mToolbar = (Toolbar) findViewById(R.id.tb_main);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
supportFinishAfterTransition();
}
});
mToolbar.inflateMenu(R.menu.menu_group_activity);
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if (R.id.action_settings == item.getItemId()) {
...
return true;
} else {
return false;
}
}
});
mToolbar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mRecyclerView.smoothScrollToPosition(0);
}
});
setSupportActionBar(mToolbar);
getSupportActionBar().setTitle(title);
getSupportActionBar().setDisplayShowTitleEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
Après avoir appelé setSupportActionBar (mToolbar), le titre et le menu sont invisibles.
Pour que le titre de la barre d'outils fonctionne avec CollapsingToolbarLayout, vous devez définir le titre du ctl activé sur false
CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
collapsingToolbarLayout.setTitleEnabled(false);
La solution est facile. Comme Daniel Persson l'a dit, vous définissez simplement collapsingToolbarLayout.setTitleEnabled(false);
Ou utilisez l'attribut XML app:titleEnabled="false"
Et définissez le titre avec la barre d'outils interne au lieu de CollapsingToolbarLayout, à savoir: toolbar.setTitle(title);
C'est très simple et il ne nécessite pas de solution de contournement.
Il semble en fait que le titre de la barre d'outils ait disparu lorsque vous l'enroulez dans un CollapsingToolBarLayout. La seule solution que j'ai pour ce problème consiste à créer un nouveau TextView et à l'ajouter à la barre d'outils. Rappelez-vous que la barre d'outils est un ViewGroup peut y ajouter des widgets. Ce n'est pas aussi propre que je voudrais, mais ça marche pour le moment.
TextView text = new TextView(this);
text.setText(title);
text.setTextAppearance(this, Android.R.style.TextAppearance_Material_Widget_ActionBar_Title_Inverse);
toolbar.addView(text);
J'espère que je pourrai bientôt trouver une solution conviviale pour xml.
L'astuce ici est de définir le titleEnabled = false de CollapsingToolbarLayout
<Android.support.design.widget.CollapsingToolbarLayout
Android:id="@+id/collapsing_toolbar_layout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:titleEnabled="false">
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:minHeight="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="Message"
app:titleMarginTop="13dp"
app:titleTextColor="@Android:color/white" />
</Android.support.design.widget.CollapsingToolbarLayout>
Ou par code:
CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar_layout);
collapsingToolbarLayout.setTitleEnabled(false);
Peut être ça? Ajoutez simplement Android:fitsSystemWindows="true"
à AppBarLayout
<Android.support.design.widget.CoordinatorLayout
...
Android:fitsSystemWindows="true">
<Android.support.design.widget.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="300dp"
...
Android:fitsSystemWindows="true"
>
<Android.support.design.widget.CollapsingToolbarLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
>
<Android.support.v7.widget.Toolbar
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:title="My Title"
/>
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
...
</Android.support.design.widget.CoordinatorLayout>
Vous devez activer actionBar.setDisplayHomeAsUpEnabled(true);
dans votre code