Toolbar隐藏了PagerTitleStrip和部分RecyclerView
Toolbar hides PagerTitleStrip and part of RecyclerView
Screenshot 1 和
Screenshot 2 我的应用
问题基本上是这样的:即使我已将 layout_behaviour 设置为我的 ViewPager,PagerTitleStrip 和 RecyclerView 仍低于我的工具栏。
更多详情:
我有一个主要的 activity,它使用下面的布局,然后从中启动片段。在尝试 CoordinatorLayout + ViewPager 和所有其他花哨的东西之前,我只有一个 FrameLayout,我在其中显示了我的片段。但是,我决定使用
app:layout_scrollFlags="scroll|enterAlways"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
这样当我滚动 recyclerview 时我的工具栏就会消失。我在网上发现 FrameLayout 没有任何行为允许我修复工具栏下方的 recyclerView 的位置,这就是为什么我更改为 ViewPager + CoordinatorLayout 来管理我的片段。
但是,这引入了一些问题。我想要实现的是 - 一个附有 PagerTitleStrip 的工具栏,当我滚动工具栏时,工具栏消失,理想情况下让 PagerTitleStrip 可见,也许它也隐藏起来,我不太关心这个。但我希望我的导航抽屉继续工作,但它没有。就像不存在一样。
现在,第一个布局实际上具有上述所有功能,但问题是条带位于工具栏下方,除非我滚动时工具栏隐藏,否则它是不可见的。抽屉工作。不幸的是,Recycler 视图项目部分隐藏在工具栏下方 - 即使我设置了它们,它们也不会从屏幕的右侧开始滚动 - appbar_scrolling_view_behavior
我的主要 activity 充气布局 m_drawerlayout.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/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v4.view.PagerTitleStrip
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:layout_gravity="top"
android:textSize="15sp"
android:textColor="@color/tealfifty"
android:background="@color/teal">
</android.support.v4.view.PagerTitleStrip>
</android.support.v4.view.ViewPager>
<ListView
android:id="@+id/drawer_list"
android:background="@color/tealDark"
android:cacheColorHint="@android:color/transparent"
android:choiceMode="singleChoice"
android:divider="@drawable/list_divider"
android:dividerHeight="1dp"
android:layout_width="280dp"
android:layout_height="match_parent"
android:layout_gravity="start"/>
</android.support.v4.widget.DrawerLayout>
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include layout="@layout/app_bar"/>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
这是我的 app_bar.xml
的代码
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/top_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/teal"
app:theme="@style/ToolbarTheme"
app:popupTheme="@style/Green.Overlay.LightPopup"
app:layout_scrollFlags="scroll|enterAlways" >
<Spinner android:id="@+id/spinner"
android:layout_gravity="right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:paddingRight="20dp"
/>
</android.support.v7.widget.Toolbar>
我尝试在其他组件中来回移动元素,进出其他组件,但没有成功。例如,使 PagerTitleStrip 附加到工具栏并共享一个行为似乎是合乎逻辑的,我必须将 PagerTitleStrip 嵌套在 AppBar 布局中,但 PagerTitleStrip 必须是 ViewPager 的直接子项才能工作......任何建议这一切?我是所有这些设计功能的新手,我研究了很多但没有成功,这里有类似的主题,但根本不是我需要的。与其他基本主题相比,互联网上似乎几乎没有关于我在上面尝试做的事情(有一些)。
如果有人想知道为什么我在没有选项卡时使用 ViewPager,那是因为正如我所说,FrameLayout 没有允许我正确使用消失的工具栏的行为,我发现这很好用。我还看到 NestedScrollView 可以使用,但我从来没有使用过它......我现在想可能使用 ViewPagerTitle,我想它限制了我对片段的 ViewPager。
问题出在:
<android.support.design.widget.CoordinatorLayout
<android.support.v4.widget.DrawerLayout
DrawerLayout
应该是根布局。
请看:http://developer.android.com/training/implementing-navigation/nav-drawer.html#DrawerLayout
To add a navigation drawer
, declare your user interface
with a
DrawerLayout
object as the root view of your layout. Inside the
DrawerLayout
, add one view that contains the main content for the
screen (your primary layout when the drawer is hidden) and another
view that contains the contents of the navigation drawer
.
此外,不建议使用ListView
代替NavigationView
。
这是文档建议的方法(除了 ListView
:)):
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#111"/>
</android.support.v4.widget.DrawerLayout>
还有:
However, that introduced a few problems. What I want to achieve is - A
Toolbar
with a PagerTitleStrip
attached to it, when I scroll the
toolbar disappears leaving the PagerTitleStrip
visible ideally, maybe
it hides as well I don't care that much about that. But I want my
Navigation Drawer
to keep working and it doesn't.
查看我的回答:
您只需像这样将工具栏放在 CollapsingToolbarLayout
中:
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingtoolbarly"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|snap">
<android.support.v7.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<ImageView
android:layout_width="match_parent"
android:layout_height="190dp"
android:minHeight="190dp"
android:scaleType="fitXY"
android:src="@drawable/header"
app:layout_collapseMode="parallax" />
</android.support.design.widget.CollapsingToolbarLayout>
如果要保留PagerTitleStrip
(现在推荐使用TabLayout
),that.And后应该收起,Toolbar会隐藏,放在[=下面就可以了27=] 及以上 </android.support.design.widget.AppBarLayout>
像这样:
</android.support.design.widget.CollapsingToolbarLayout>
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:background="?attr/colorPrimary" />
</android.support.design.widget.AppBarLayout>
差不多就这些了,祝你好运。
Screenshot 1 和 Screenshot 2 我的应用
问题基本上是这样的:即使我已将 layout_behaviour 设置为我的 ViewPager,PagerTitleStrip 和 RecyclerView 仍低于我的工具栏。
更多详情:
我有一个主要的 activity,它使用下面的布局,然后从中启动片段。在尝试 CoordinatorLayout + ViewPager 和所有其他花哨的东西之前,我只有一个 FrameLayout,我在其中显示了我的片段。但是,我决定使用
app:layout_scrollFlags="scroll|enterAlways"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
这样当我滚动 recyclerview 时我的工具栏就会消失。我在网上发现 FrameLayout 没有任何行为允许我修复工具栏下方的 recyclerView 的位置,这就是为什么我更改为 ViewPager + CoordinatorLayout 来管理我的片段。
但是,这引入了一些问题。我想要实现的是 - 一个附有 PagerTitleStrip 的工具栏,当我滚动工具栏时,工具栏消失,理想情况下让 PagerTitleStrip 可见,也许它也隐藏起来,我不太关心这个。但我希望我的导航抽屉继续工作,但它没有。就像不存在一样。
现在,第一个布局实际上具有上述所有功能,但问题是条带位于工具栏下方,除非我滚动时工具栏隐藏,否则它是不可见的。抽屉工作。不幸的是,Recycler 视图项目部分隐藏在工具栏下方 - 即使我设置了它们,它们也不会从屏幕的右侧开始滚动 - appbar_scrolling_view_behavior
我的主要 activity 充气布局 m_drawerlayout.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/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v4.view.PagerTitleStrip
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:layout_gravity="top"
android:textSize="15sp"
android:textColor="@color/tealfifty"
android:background="@color/teal">
</android.support.v4.view.PagerTitleStrip>
</android.support.v4.view.ViewPager>
<ListView
android:id="@+id/drawer_list"
android:background="@color/tealDark"
android:cacheColorHint="@android:color/transparent"
android:choiceMode="singleChoice"
android:divider="@drawable/list_divider"
android:dividerHeight="1dp"
android:layout_width="280dp"
android:layout_height="match_parent"
android:layout_gravity="start"/>
</android.support.v4.widget.DrawerLayout>
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include layout="@layout/app_bar"/>
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
这是我的 app_bar.xml
的代码<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/top_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/teal"
app:theme="@style/ToolbarTheme"
app:popupTheme="@style/Green.Overlay.LightPopup"
app:layout_scrollFlags="scroll|enterAlways" >
<Spinner android:id="@+id/spinner"
android:layout_gravity="right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:paddingRight="20dp"
/>
</android.support.v7.widget.Toolbar>
我尝试在其他组件中来回移动元素,进出其他组件,但没有成功。例如,使 PagerTitleStrip 附加到工具栏并共享一个行为似乎是合乎逻辑的,我必须将 PagerTitleStrip 嵌套在 AppBar 布局中,但 PagerTitleStrip 必须是 ViewPager 的直接子项才能工作......任何建议这一切?我是所有这些设计功能的新手,我研究了很多但没有成功,这里有类似的主题,但根本不是我需要的。与其他基本主题相比,互联网上似乎几乎没有关于我在上面尝试做的事情(有一些)。
如果有人想知道为什么我在没有选项卡时使用 ViewPager,那是因为正如我所说,FrameLayout 没有允许我正确使用消失的工具栏的行为,我发现这很好用。我还看到 NestedScrollView 可以使用,但我从来没有使用过它......我现在想可能使用 ViewPagerTitle,我想它限制了我对片段的 ViewPager。
问题出在:
<android.support.design.widget.CoordinatorLayout
<android.support.v4.widget.DrawerLayout
DrawerLayout
应该是根布局。
请看:http://developer.android.com/training/implementing-navigation/nav-drawer.html#DrawerLayout
To add a
navigation drawer
, declare your userinterface
with aDrawerLayout
object as the root view of your layout. Inside theDrawerLayout
, add one view that contains the main content for the screen (your primary layout when the drawer is hidden) and another view that contains the contents of thenavigation drawer
.
此外,不建议使用ListView
代替NavigationView
。
这是文档建议的方法(除了 ListView
:)):
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- The navigation drawer -->
<ListView android:id="@+id/left_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#111"/>
</android.support.v4.widget.DrawerLayout>
还有:
However, that introduced a few problems. What I want to achieve is - A
Toolbar
with aPagerTitleStrip
attached to it, when I scroll the toolbar disappears leaving thePagerTitleStrip
visible ideally, maybe it hides as well I don't care that much about that. But I want myNavigation Drawer
to keep working and it doesn't.
查看我的回答:
您只需像这样将工具栏放在 CollapsingToolbarLayout
中:
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingtoolbarly"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|snap">
<android.support.v7.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<ImageView
android:layout_width="match_parent"
android:layout_height="190dp"
android:minHeight="190dp"
android:scaleType="fitXY"
android:src="@drawable/header"
app:layout_collapseMode="parallax" />
</android.support.design.widget.CollapsingToolbarLayout>
如果要保留PagerTitleStrip
(现在推荐使用TabLayout
),that.And后应该收起,Toolbar会隐藏,放在[=下面就可以了27=] 及以上 </android.support.design.widget.AppBarLayout>
像这样:
</android.support.design.widget.CollapsingToolbarLayout>
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:background="?attr/colorPrimary" />
</android.support.design.widget.AppBarLayout>
差不多就这些了,祝你好运。