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>
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.
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>
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.
Essayez de ne pas mettre ceci dans le coordinatorLayout:
Android:fitsSystemWindows="true"
Ça marche pour moi. Aucune idée pourquoi. Bonne chance
Dans mon cas cela fonctionne! app:layout_collapseMode="pin"
à l'intérieur de la présentation de la barre d'outils
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;
}
});
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"/>
change app: layout_collapseMode = "parallaxe" à app.lay:collapseMode="pin"in imageView . espérons que cela fonctionnera pour vous
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 .