带有折叠工具栏的Android SlidingTabLayout错误定位
Posted
技术标签:
【中文标题】带有折叠工具栏的Android SlidingTabLayout错误定位【英文标题】:Android SlidingTabLayout bad positioning with collapsing Toolbar 【发布时间】:2015-10-18 09:16:39 【问题描述】:我有一个带有图像的折叠工具栏,向上滚动时它应该移到顶部。在此之后,我想要一个 SlidingTabLayout,它有不同的选项卡并且它必须遵循折叠工具栏。
当工具栏收起时,布局将仅显示收起模式下的工具栏和选项卡。
它是这样显示的:
应该是这样的
collapsingToolbar 折叠时应该是这样的:
我的 XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_
android:fitsSystemWindows="true"
>
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_
android:layout_
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_
android:layout_
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginBottom="32dp"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/header"
android:layout_
android:layout_
android:background="@drawable/lollipop"
android:fitsSystemWindows="true"
android:scaleType="fitCenter"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/anim_toolbar"
android:layout_
android:layout_
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<!-- SlidingTabLayout from Google -->
<org.testing.materialized.SlidingTabLayout
android:id="@+id/tabs"
android:layout_
android:layout_
/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_
android:layout_
android:layout_weight="1"
/>
</RelativeLayout>
图 2-3 用 gimp 修改,让你理解
已解决: 使用下面和 xml 坐标可以正确解决问题。
【问题讨论】:
【参考方案1】:我有同样的问题。将选项卡布局或您的情况下的侧板选项卡布局放在折叠工具栏布局和应用栏布局之外。但是请确保将选项卡布局放置在具有
的父布局中app:layout_behavior="@string/appbar_scrolling_view_behavior"
例如,
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_
android:fitsSystemWindows="true"
>
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_
android:layout_
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_
android:layout_
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginBottom="32dp"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/header"
android:layout_
android:layout_
android:background="@drawable/lollipop"
android:fitsSystemWindows="true"
android:scaleType="fitCenter"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/anim_toolbar"
android:layout_
android:layout_
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<!-- SlidingTabLayout from Google -->
<org.testing.materialized.SlidingTabLayout
android:id="@+id/tabs"
android:layout_
android:layout_/>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_
android:layout_
android:layout_weight="1"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
</LinearLayout>
</RelativeLayout>
【讨论】:
【参考方案2】:将滑动标签布局放在折叠工具栏之外,但仍然在应用栏内,并将app:layout_behavior="@string/appbar_scrolling_view_behavior"
添加到viewpager。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_
android:fitsSystemWindows="true"
>
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_
android:layout_
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_
android:layout_
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginBottom="32dp"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/header"
android:layout_
android:layout_
android:background="@drawable/lollipop"
android:fitsSystemWindows="true"
android:scaleType="fitCenter"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/anim_toolbar"
android:layout_
android:layout_
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.CollapsingToolbarLayout>
<!-- SlidingTabLayout from Google -->
<org.testing.materialized.SlidingTabLayout
android:id="@+id/tabs"
android:layout_
android:layout_/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_
android:layout_
android:layout_weight="1"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
</RelativeLayout>
【讨论】:
我已经尝试过了,但它不起作用。随着您的代码(我在发布之前强加),SlidingTabLayout 消失了,可能它被 viewPager【参考方案3】:试试这个对我有用:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_
android:fitsSystemWindows="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_
android:layout_
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_
android:layout_
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginBottom="32dp"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/header"
android:layout_
android:layout_
android:background="@drawable/card1"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/anim_toolbar"
android:layout_
android:layout_
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal"
android:layout_below="@+id/appbar"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/linearLayout">
<com.gsdailytips.SlidingTabLayout
android:id="@+id/tabs"
android:layout_
android:layout_
android:elevation="2dp"
android:background="@color/indigo"
android:layout_alignBottom="@+id/appbar"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_
android:layout_
android:layout_below="@+id/linearLayout"
android:layout_centerHorizontal="true">
</android.support.v4.view.ViewPager>
</RelativeLayout>
【讨论】:
以上是关于带有折叠工具栏的Android SlidingTabLayout错误定位的主要内容,如果未能解决你的问题,请参考以下文章
带有折叠工具栏的 RecyclerView 中的 Android 字母快速滚动视图
带有 MotionLayout 的 Android 折叠工具栏 - 当 RecyclerView 为空/不可滚动时禁用运动