web-dev-qa-db-fra.com

Android - Le menu de dépassement de capacité et le bouton Précédent ne sont pas affichés dans la barre d'outils Réduire

J'essaie d'implémenter des fonctionnalités de la nouvelle bibliothèque de support de conception pour créer une barre d'outils de défilement de parallaxe qui ressemble à la nouvelle page de profil WhatsApp de conception matérielle. Cependant, je ne parviens pas à afficher le menu de débordement et le bouton Précédent dans les coins supérieurs.

J'ai essayé d'utiliser les méthodes suivantes pour afficher le bouton Précédent, mais aucune d'entre elles ne fonctionne.

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

Et écraser la méthode onCreateOptionsMenu pour le menu de débordement ne fonctionnait pas non plus.

Quelqu'un sait-il comment ajouter ces icônes de barre d'outils à une barre d'outils Collapsing à partir de la bibliothèque de support technique? Ci-dessous ma mise en page XML pour l’activité. Merci! 

<Android.support.design.widget.CoordinatorLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/main_content"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true">

<Android.support.design.widget.AppBarLayout
    Android:id="@+id/appbar"
    Android:layout_width="match_parent"
    Android:layout_height="256dp"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    Android:fitsSystemWindows="true">

    <Android.support.design.widget.CollapsingToolbarLayout
        Android:id="@+id/collapsing_toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        Android:fitsSystemWindows="true"
        app:contentScrim="@color/primary"
        app:expandedTitleMarginStart="48dp"
        app:expandedTitleMarginEnd="64dp">

        <ImageView
            Android:id="@+id/backdrop"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:src="@drawable/headerbg"
            Android:scaleType="centerCrop"
            Android:fitsSystemWindows="true"
            app:layout_collapseMode="parallax" />

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/Theme.AppCompat.Light.DarkActionBar"
            app:layout_collapseMode="pin" />

    </Android.support.design.widget.CollapsingToolbarLayout>

</Android.support.design.widget.AppBarLayout>

<Android.support.v4.widget.NestedScrollView
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_gravity="fill_vertical"
    Android:layout_marginBottom="?attr/actionBarSize"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

</Android.support.v4.widget.NestedScrollView>

27
Rick

J'ai eu le même problème, aucune des réponses existantes ne m'a aidé, solution surprenante de mon problème était dans la description de la question. 


Solution pour l'activité AppCompat

Donc, si vous travaillez avec la barre d’outils rétractable avec le bouton Précédent, il faut quelques lignes dans la méthode du contrôleur onCreate:

//change id to Your id
toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar);

//this line shows back button
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

Manifeste de cette activité (notez parentActivityName attribut):

<activity
  Android:name=".SomeActivity"
  Android:parentActivityName=".MainActivity"
  Android:theme="@style/AppTheme.NoActionBar"/>

Partie du modèle:

<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:fitsSystemWindows="true"
    Android:theme="@style/AppTheme.AppBarOverlay">

    <Android.support.design.widget.CollapsingToolbarLayout
        Android:id="@+id/collapsing_toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="200dp"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:contentScrim="@color/colorPrimary"
        Android:fitsSystemWindows="true"
        app:expandedTitleGravity="center_horizontal"
        >

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            Android:background="@Android:color/transparent"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:layout_collapseMode="pin"
            />

    </Android.support.design.widget.CollapsingToolbarLayout>

</Android.support.design.widget.AppBarLayout>

Solution alternative (également AppCompat Activity)

Méthode du contrôleur onCreate:

toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

toolbar.setNavigationIcon(Android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            onBackPressed();
        }
});

Cette approche utilise le même manifeste et modèle présentés dans la première solution.

18
Maciej Sikora

Essayez de ne pas mettre ceci dans le coordinatorLayout:

Android:fitsSystemWindows="true"

Ça marche pour moi. Aucune idée pourquoi. Bonne chance

8
DonutKing

Dans mon cas cela fonctionne! app:layout_collapseMode="pin" à l'intérieur de la présentation de la barre d'outils

8
Manuelvalles

Ce qui suit active le bouton de navigation:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp, null));
toolbar.setNavigationOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        //onBackPressed()
    }
});

Pour obtenir le comportement du menu de dépassement, vous devez déclarer un fichier menu.xml avec showAsAction: jamais appliqué à vos éléments de menu, comme:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto">

    <item Android:id="@+id/action_one"
        Android:title="action 1"
        Android:orderInCategory="1"
        app:showAsAction="never"/>

    <item Android:id="@+id/action_two"
        Android:title="action 2"
        Android:orderInCategory="2"
        app:showAsAction="never"/>
</menu>

Et gonflez-le comme:

toolbar.inflateMenu(R.menu.main);
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_one:
                break;
            case R.id.action_two:
                break;
        }
        return true;
    }
});
1
Markus Rubey

Si vous n'avez pas ajouté de balise parentActivityName dans le fichier manifeste, ajoutez-y les lignes de code suivantes:

<activity Android:name=".Activity.MovieData"
        Android:parentActivityName=".Activity.Home">
</activity>

où "Activité" est le nom de mon paquet "MovieData" est le nom de mon activité "Maison" est le nom de mon activité de destination.

EDIT: Si vous prenez en charge les api Android de niveau 15 et inférieur, parentActivityName ne fonctionnera pas.

Pour prendre en charge les versions inférieures, vous devez ajouter une balise meta-data en tant que 

<meta-data
    Android:name="PARENT_ACTIVITY"
    Android:value="com.example.Activity.Home"/>
0
Aditya Verma

change app: layout_collapseMode = "parallaxe" à app.lay:collapseMode="pin"in imageView . espérons que cela fonctionnera pour vous 

0
Jay Kanani

Aller à res/values ​​/ et ouvrir styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

Remplacez parent = "Theme.AppCompat.Light.NoActionBar" par parent = "Theme.AppCompat.Light"

Ensuite, démarrez le débogage et supprimez tout le code inutile comme // setSupportActionBar(toolbar); things .

0
GauRav MisHra