Android – 溢出菜单和后退button不显示在折叠工具栏中

我试图从新的devise支持库实现function创build一个视差滚动工具栏看起来类似于新的材料deviseWhatsAppconfiguration文件页面。 但是,我无法获得溢出菜单和返回button显示在顶部的angular落。

我已经尝试使用下面的方法来显示后退button,但没有一个工作。

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

覆盖溢出菜单的onCreateOptionsMenu方法也不起作用。

有谁知道如何将这些工具栏图标添加到devise支持库的CollapsingToolbar? 下面是我的布局xml的活动。 谢谢!

 <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> 

我有同样的问题,从现有的答案都没有帮助我,令人惊讶的解决我的问题是在问题描述。


AppCompat活动的解决scheme

因此,使用后退button工作的折叠工具栏需要控制器onCreate方法中的几行:

 //change id to Your id toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //this line shows back button getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

这个活动的清单(注意parentActivityName属性):

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

模板部分:

 <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> 

替代解决scheme(也AppCompat活动)

控制器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(); } }); 

这种方法使用第一个解决scheme中提供的相同的清单和模板。

尽量不要把这个放在coordinatorLayout中。 机器人:fitsSystemWindows = “真”

这个对我有用。 不知道为什么。 祝你好运

在我的情况下,这工作! 工具栏布局中的app:layout_collapseMode="pin"

以下启用导航button:

 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() } }); 

要获得溢出菜单的行为,你必须用showAsAction声明一个menu.xml文件:从来没有应用到你的菜单项,如:

 <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> 

并夸大它像:

 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; } }); 

改变这个..

  <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:elevation="15dp" android:layout_width="match_parent" app:logo="@drawable/action_bar_logo" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> 

popupTheme使差异,这是你正在寻找..

这是我的完整的XML

 <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".AddUser"> <android.support.design.widget.AppBarLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:elevation="15dp" android:layout_width="match_parent" app:logo="@drawable/action_bar_logo" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_add_user" /> </android.support.design.widget.CoordinatorLayout> 

祝你好运!

在imageView中将app:layout_collapseMode =“parallax”更改为app:layout_collapseMode =“pin”。 希望这会为你工作

如果你还没有在清单文件中添加parentActivityName标签,那么通过添加以下几行代码来做到这一点

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

其中“活动”是我的包名称“MovieData”是我的活动名称“家庭”是我的目标活动名称

编辑:如果你是支持android api级别15和以下然后parentActivityName将无法正常工作。

为了支持更低的版本,你需要添加元数据标签

 <meta-data android:name="PARENT_ACTIVITY" android:value="com.example.Activity.Home"/>