【问题标题】:Android 5.0 material tabs with toolbar带有工具栏的 Android 5.0 材质选项卡
【发布时间】:2014-12-21 14:44:10
【问题描述】:

如何实现类似标签的播放商店(滚动隐藏、适当的边距、细指示器)?我已经尝试过 SlidingTabs 和其他一些库,但它们都已经过时了。

更详细地说,当我为 API 20 及以下(Android 5.0 之前)进行开发时,我曾经调用 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); ? 现在在 Android 5.0 中,整个 ActionBar 都被 ToolBar 取代了。

在 Material Design 中使用 ToolBar 的正确方法是什么?如何让选项卡在滚动时隐藏?

谢谢!

截图:

【问题讨论】:

    标签: android android-5.0-lollipop material-design


    【解决方案1】:

    有这个布局。它看起来不像新的游戏商店,但非常接近。只是无法摆脱工具栏边距。

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/my_awesome_toolbar"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:minHeight="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:theme="@style/ThemeOverlay.AppCompat.ActionBar">
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
    
                <TextView
                    android:text="@string/hello_world"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="16dp"
                    style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title" />
    
                <widget.SlidingTabLayout
                    android:id="@+id/sliding_tabs"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />
            </LinearLayout>
        </android.support.v7.widget.Toolbar>
    
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingTop="@dimen/activity_vertical_margin"
            android:paddingBottom="@dimen/activity_vertical_margin">
    
            <TextView
                android:text="@string/hello_world"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
    
            <android.support.v4.view.ViewPager
                android:id="@+id/ViewPager"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
    
        </LinearLayout>
    </LinearLayout>
    

    【讨论】:

    • 工具栏隐藏在滚动条上??
    • 我发现这个布局只产生了一个slidingTabLayout,它位于(正常)工具栏空间内,位于左侧(菜单/后退)图标和任何可以设置的操作项之间。当工具栏中有足够的空间时,也许就是这种情况?随后,我开始简单地将 SlidingTabLayout 放置在工具栏下方,而不是在工具栏中。
    • 查看来自 Google 的示例之一:github.com/google/iosched/blob/master/android/src/main/res/…。手动定义标题通常不是一个好主意。
    • 如何在这个标签布局中添加标签?
    【解决方案2】:

    您可以从新的 Android 设计库中使用类似的东西。一定要包含 compile 'com.android.support:design:22.2.0'

    <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.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.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
    </android.support.design.widget.AppBarLayout>
    
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
    
    </android.support.design.widget.CoordinatorLayout>
    

    【讨论】: