web-dev-qa-db-fra.com

comment épingler le titre dans la barre d'outils à l'intérieur de CollapsingToolbarLayout

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.

12
Alex.Li

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);
56
Daniel Persson

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.

16
Francesco Florio

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.

10
kerpie

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);
6
Sjd

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>

C'est ce que vous obtenez

0
Ievgen

Vous devez activer actionBar.setDisplayHomeAsUpEnabled(true); dans votre code

0
saikrupa