我需要创建一个带有ListView
和ActionBar
的GUI,它会在向下滚动时隐藏,向上滚动时必须重新出现。
以下指南对我没有帮助:
我需要这样的东西:
答案 0 :(得分:24)
如果您想获得具有此行为的列表,您应该:
compile 'com.android.support:design:22.2.0'
CoordinatorLayout
与工具栏一起使用,您必须在其中定义app:layout_scrollFlags="scroll|enterAlways"
RecyclerView
代替ListView
。如上所述,here ListView
和GridView
与CoordinatorLayout
的预期行为只有API> 21。在这种情况下,您必须使用setNestedScrollingEnabled(true);
official blog post显示了这种情况:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<! -- Your Scrollable View -->
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
...
app:layout_scrollFlags="scroll|enterAlways">
</android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>
答案 1 :(得分:8)
我建议您使用Google的新支持设计库。
将其包含在您的家属中:
compile 'com.android.support:design:22.2.0'
然后将AppBarLayout
与NestedScrollView
一起使用。
对于Toolbar
定义app:layout_scrollFlags="scroll|enterAlways"
,它表示它会在您滚动时消失,如果向上滚动则立即返回(意味着您不必一直向上滚动)。
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_scrollFlags="scroll|enterAlways" />
</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"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.v4.widget.NestedScrollView>
答案 2 :(得分:1)
您应该使用{{1}}执行此任务。它是支持设计库的一部分。 Here,在 CoordinatorLayout和应用栏部分,您可以找到一个示例
答案 3 :(得分:1)
使用[CoordinatorLayout]:https://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.html,允许在子视图之间进行协同处理。就像在另一个视图中观察到一种行为(ListView-&gt;滚动)时,在某些视图上执行(AppBarLayout-&gt;滚动)。
制作Listview nestedScrollingEnabled,适用于&gt; API 21
android:nestedScrollingEnabled="true"
触发appbar滚动的布局行为。
android:nestedScrollingEnabled="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
显示隐藏/滚动所需的任何布局(ToolBar / TabLayout / any),将其放在AppBarLayout中,并启用滚动标记。
app:layout_scrollFlags="scroll|enterAlways"