天道酬勤,学无止境

How to set my toolbar fixed while scrolling android

I am currently working in e-commerce android app, i need to fix the toolbar while scrolling.

As i attached the screenshot below. while scrolling the action bar need to be fixed and the body content scroll behind the toolbar

Here is the layout xml:

<LinearLayout
    android:id="@+id/container_toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <include
        android:id="@+id/toolbar_reg"
        layout="@layout/app_bar" />
</LinearLayout>

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:elevation="3dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="?android:attr/actionBarSize"
        android:background="#ffffff"
        android:orientation="vertical">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:layout_marginTop="15dp"
            android:src="@drawable/logo" />


        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:hint="@string/reg_name"
                android:singleLine="true" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:hint="@string/reg_email"
                android:inputType="textEmailAddress" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:hint="@string/reg_password"
                android:inputType="textPassword" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_cpassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_cpassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:hint="Confirm Password"
                android:inputType="textPassword" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_mobile"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_mobile"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:hint="Mobile No"
                android:inputType="number" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_dob"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_dob"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:hint="Date of Birth" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_address"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_address"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Permanent Address" />
        </android.support.design.widget.TextInputLayout>

        <Button
            android:id="@+id/btn_signup"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="25dp"
            android:background="@color/colorPrimary"
            android:text="@string/btn_sign_up"
            android:textColor="@android:color/white" />

        <TextView
            android:id="@+id/link_login"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="150dp"
            android:layout_marginTop="15dp"
            android:gravity="center"
            android:text="@string/req_login"
            android:textSize="16dp" />

    </LinearLayout>
</ScrollView>

评论

You should structure your XML so that it's like this:

Relative layout
|-->Toolbar    (android:id="@+id/toolbar")
|-->ScrollView (android:layout_below="@id/toolbar")
    |-->ViewGroup(For example, CoordinatorLayout)
        |-->Child
        |-->Child
        |-->Child

Example code:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v7.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:theme="@style/WelcomeActivityTheme.Toolbar"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        />
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/toolbar">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        />
    </ScrollView>
</RelativeLayout>

Your posted layout does not seem to have a root view.

However to fix the scrolling problem you need to move your scroll view under the same parent as follows:

<LinearLayout
    android:id="@+id/container_toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <include
        android:id="@+id/toolbar_reg"
        layout="@layout/app_bar" />

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:elevation="3dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="?android:attr/actionBarSize"
        android:background="#ffffff"
        android:orientation="vertical">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:layout_marginTop="15dp"
            android:src="@drawable/logo" />


        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:hint="@string/reg_name"
                android:singleLine="true" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:hint="@string/reg_email"
                android:inputType="textEmailAddress" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:hint="@string/reg_password"
                android:inputType="textPassword" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_cpassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_cpassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:hint="Confirm Password"
                android:inputType="textPassword" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_mobile"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_mobile"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:hint="Mobile No"
                android:inputType="number" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_dob"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_dob"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:hint="Date of Birth" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_address"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp">

            <EditText
                android:id="@+id/input_address"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Permanent Address" />
        </android.support.design.widget.TextInputLayout>

        <Button
            android:id="@+id/btn_signup"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="25dp"
            android:background="@color/colorPrimary"
            android:text="@string/btn_sign_up"
            android:textColor="@android:color/white" />

        <TextView
            android:id="@+id/link_login"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="150dp"
            android:layout_marginTop="15dp"
            android:gravity="center"
            android:text="@string/req_login"
            android:textSize="16dp" />

    </LinearLayout>
</ScrollView>
</LinearLayout>

Given Root view is RelativeLayout in your xml You should set in scrollview xml

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/container_toolbar"
    android:elevation="3dp">

and remove margin_top from linear layout below scrollview tag.

I tried many ways to keep the toolbar fixed, while not resizing or compressing the layout by android:windowSoftInputMode="adjustResize", that is not a proper.

That is only possible by Coordinator layout:

<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.design.widget.CollapsingToolbarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.Toolbar 
           xmlns:android="http://schemas.android.com/apk/res/android"
           xmlns:ripple="http://schemas.android.com/apk/res-auto"
           android:id="@+id/tv_toolbar"
           android:layout_width="match_parent"
           android:layout_height="50dp"
           android:background="#fff"
           ripple:contentInsetStart="0dp">
        </android.support.v7.widget.Toolbar>

    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

<ScrollView
    android:id="@+id/coordinate_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:marginTop="56dp">
</ScrollView>

Keep the structure as

   Coordinator layout
  |-->Toolbar    (android:id="@+id/toolbar")
  |-->ScrollView (android:layout_below="@id/toolbar")
   |-->Child
   |-->Child
   |-->Child

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • How to fix a view in collapsing toolbar while scrolling?
    I want to implement collapsing toolbar with two EditText in it, for the purpose of user input. I'm following this answer. The answer gives perfect solution for adding two EditText into the collapsing toolbar. But the behavior is not as expected. What I've achieved: Expected Behavior: My XML code <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="wrap_content" android:fitsSystemWindows="true"> <android.support.design.widget
  • 如何在滚动时修复折叠工具栏中的视图?(How to fix a view in collapsing toolbar while scrolling?)
    问题 为了用户输入,我想实现带有两个EditText折叠工具栏。 我正在关注这个答案。 答案为将两个EditText添加到折叠工具栏中提供了完美的解决方案。 但行为并不像预期的那样。 我所取得的成就: 预期行为: 我的 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:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" > <android.support.design.widget.CollapsingToolbarLayout android:id="@+id
  • AppBar 折叠/展开时如何将工具栏固定在顶部?(How to keep the toolbar fixed at the top when AppBar collapses/expands?)
    问题 概述 我正在尝试实现材料设计中描述的滚动技术之一,具有重叠内容的灵活空间。 具有重叠内容的灵活空间内容可以与应用栏重叠。 行为: 应用栏的起始位置应位于内容后面。 向上滚动时,应用栏应该比内容滚动得更快,直到内容不再与其重叠。 固定到位后,应用栏会抬起以允许内容在下方滚动。 https://www.google.co.in/design/spec/patterns/scrolling-techniques.html#scrolling-techniques-scrolling 问题 但是,问题是,我的 AppBar 中的标题在展开时向下滚动并隐藏在重叠内容下方。 在这里,我的工具栏隐藏在重叠的 CardView 下方。 当应用栏折叠时,工具栏和标题从下方向上滑动。 代码 这是我的代码: 活动-main.xml <android.support.design.widget.CoordinatorLayout ... android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="200dp"
  • Android - 框架布局高度与协调器布局不匹配(Android - Frame layout height not matching with coordinator layout)
    问题 我的 FrameLayout(抽屉式布局中的容器)有问题。 FrameLayout 的高度超过了屏幕高度(在底部的 android 默认菜单按钮下方)。 <android.support.design.widget.CoordinatorLayout android:id="@+id/main_content" android:layout_width="fill_parent" android:layout_height="fill_parent"> <android.support.design.widget.AppBarLayout android:id="@+id/navContainer" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways" /
  • CollapsingToolbarLayout 并在滚动时隐藏工具栏(CollapsingToolbarLayout and hide toolbar while scrolling)
    问题 我正在尝试使用 CoordinatorLayout 和 CollapsingToolbarLayout 创建一些组合布局。 在第一种状态下,当我们位于最顶部并且尚未滚动时,我希望工具栏如下所示展开(是的,我做到了): 在第二种状态下,当开始向下滚动时,图像和工具栏应该消失,如下所示(仅显示选项卡): 在最后一个状态中,一旦我在列表中的某个点(但不是列表的顶部)我想开始向上滚动,一旦我开始向上滚动,我想要工具栏(而不是带有图像的工具栏)到开始whowing,如下图(如果没有到达列表顶部,则不会显示图像,只有工具栏): 我能够达到第一个状态,但其他 2 个状态有问题,一旦在 CollapsingToolbarLayout 内部实现了工具栏,我在 CollapsingToolbarLayout 组件之外可以用它做什么的灵活性就不清楚了。 我无法隐藏工具栏,如果我这样做,它只会在我到达顶部时显示。 无论如何,我当前的 XML(如下所示)处于实现第一张图片的状态,但是一旦我开始向下滚动,工具栏就会停留在顶部并且不会隐藏。 注意:我必须告诉工具栏保持“固定”状态,因为如果我不这样做,那么工具栏中的信息就会消失,并且只会显示一个空的工具栏(这是另一篇文章,但知道为什么会发生这种情况仍然很有趣?) . 这是我当前的 xml: <android.support.design.widget
  • 带有固定/固定工具栏和“enterAlways”功能的 CollapsingToolbarLayout(CollapsingToolbarLayout with fixed/pinned Toolbar and functionality of "enterAlways")
    问题 我有一个基于材料设计指南的标准“CollapsingToolbarLayout”实现。 通过下面的设置,我能够实现图片上描述的行为: <CoordinatorLayout ...> <AppBarLayout ...> <CollapsingToolbarLayout app:layout_scrollFlags="scroll|enterAlways" ...> <Toolbar app:layout_collapseMode="pin"> </Toolbar> <MyCustomContent01 ... /> </CollapsingToolbarLayout> </AppBarLayout> <MyCustomContent02 ... /> </CoordinatorLayout> 题 如何实现以下行为?: 向上滚动:始终完全展开工具栏,即使我们不在列表的顶部。 向下滚动:只需折叠工具栏,但不要隐藏它。 换句话说:如何在保留步骤 4 的条件的同时摆脱步骤 3? 研究 对我来说,关于这个主题的最好的文章似乎是这篇文章,但是所提供的配置都不符合我的需求。 尝试一: <CollapsingToolbarLayout app:layout_scrollFlags="scroll|enterAlways" ...> 永远不要完全隐藏工具栏(摆脱第 3 步)
  • 应用程式:layout_behavior之后,Android NestedScrollView的大小错误(Android NestedScrollView has wrong size after app:layout_behavior)
    问题 由于Google已发布了适用于Android的设计支持库,因此无需实现自定义代码就可以完成很多不错的事情。 虽然我已经在此库中测试了自定义视图,但发现更糟的是,我不知道这是否是错误。 我在github上找到了Cheesesquare项目。 在activity_detail.xml(布局文件)中,NestedScrollView内部有3个CardView。 如果删除其中的2个,则可以看到NestedScrollView没有父(match_parent)的完整大小。 NestedScrollView绑定到父视图的底部。 http://i.stack.imgur.com/BXl7w.png 当我删除app:layout_behavior="@string/appbar_scrolling_view_behavior"时,NestedScrollView的尺寸为原尺寸。 但是,当我删除布局行为时,工具栏不会折叠。 有没有解决办法? 示例布局文件可以在这里找到:https://github.com/Smove/cheesesquare/blob/stackoverflow/app/src/main/res/layout/activity_detail.xml 您可以从我的github分支stackoverflow构建Cheesesquare apk 回答1 我遇到了这个问题
  • 如何在recyclerView向下滚动时折叠后隐藏工具栏(How to hide toolbar after collapsing while recyclerView scrolling down)
    问题 如何在recyclerView向下滚动时折叠后隐藏工具栏,在recyclerView向上滚动时显示工具栏,并在列表末尾展开CollapsingToolbarLayout? 现在 CollapsingToolbarLayout 只是折叠,并且工具栏在滚动时一直显示。 <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:id="@+id/coordinatorlayout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".screens.MainActivity"> <android.support.design.widget.AppBarLayout android:id="@+id/appbarlayout" android:layout_width="match_parent
  • 使用 setNestedScrollingEnabled(false) 时如何避免滚动本身的阻塞?(How to avoid blocking of scrolling itself when using setNestedScrollingEnabled(false)?)
    问题 背景 我们有一个相当复杂的布局,其中包含 CollapsingToolbarLayout,底部还有一个 RecyclerView。 在某些情况下,我们通过在 RecyclerView 上调用 setNestedScrollingEnabled(boolean) 暂时禁用 CollapsingToolbarLayout 的展开/折叠。 问题 这通常工作正常。 但是,在某些(很少见)的情况下,RecyclerView 上的缓慢滚动会被半阻塞,这意味着它在向下滚动时会尝试向后滚动。 就好像它有 2 个相互对抗的滚动(向上滚动和向下滚动): 触发它的代码是这样的: res/layout/activity_scrolling.xml <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"
  • How to keep the toolbar fixed at the top when AppBar collapses/expands?
    Overview I am trying to implement one of the Scrolling Techniques, Flexible space with overlapping content, described in Material Design. Flexible space with overlapping content Content can overlap the app bar. Behavior: The app bar’s starting position should be located behind the content. Upon upward scroll, the app bar should scroll faster than the content, until the content no longer overlaps it. Once anchored in place, the app bar lifts up to allow content to scroll underneath. https://www.google.co.in/design/spec/patterns/scrolling-techniques.html#scrolling-techniques-scrolling Problem
  • NestedScrollView中的ViewPager(ViewPager in a NestedScrollView)
    问题 我需要创建一个类似于Google Newsstand的界面,该界面是一种在折叠的标题(垂直滚动)上的ViewPager(水平滚动)。 我的要求之一就是使用Google IO 2015上提供的新的设计支持库。(http://android-developers.blogspot.ca/2015/05/android-design-support-library.html) 基于Chris Banes创建的示例(https://github.com/chrisbanes/cheesesquare),我已经达到了能够执行折叠行为的目的,但是具有基本的LinearLayout(无水平滚动)。 我试图用ViewPager替换LinearLayout,但出现黑屏。 我玩过:宽度,重量和各种视图组,但是..仍然是空白屏幕。 似乎ViewPager和NestedScrollView彼此不喜欢。 我通过使用Horizo​​ntalScrollView尝试了一种解决方法:它可以工作,但是我放弃了PagerTitleStrip功能的好处,也没有将注意力集中在单个面板上(我可以在两个面板之间水平停​​止)。 现在,我没有更多的想法了,如果有人可以引导我找到解决方案的话... 谢谢 这是我最新的布局文件: <?xml version="1.0" encoding="utf-8"?> <android
  • 如何将 RecyclerView 放在 Toolbar 下方和 TabLayout 上方,ViewPager 还以自定义方式处理对滚动的响应?(How to put RecyclerView below Toolbar and above TabLayout and ViewPager also handling responses to scrolls in a custom manner?)
    问题 我想创建一个如下图所示的布局: 一个 CoordinatorLayout ,其中包含: CollapsingToolbarLayout(包含 ImageView 和 Toolbar) 回收器视图选项卡布局 ViewPager(它的每个片段都包含一个 RecyclerView) 我想以这种方式响应滚动事件: CollapsingToolbarLayout 通过滚动展开和折叠工具栏贴在顶部直到 TabLayout 到达顶部之后工具栏向上滚动并且 TabLayout 贴在顶部 我在使用 CollapsingToolbarLayout 和 TabLayout 之间的 RecyclerView 时遇到了问题。 我可以在没有 RecyclerView 的情况下实现这个布局(我把 CollapsingToolbarLayout 和 TabLayout 放在 AppBarLayout 里面,把 ViewPager 放在它外面,在 CoordinatorLayout 里面)。 我的问题: 我应该把 RecyclerView 放在哪里? 我应该为每个布局设置哪个和在哪里layout_scrollFlags和layout_behavior ? 似乎 AppBarLayout 的高度有限。 当我将 RecyclerView 放入 AppBarLayout 时,只有一部分 RecyclerView
  • Android CoordinatorLayout + AppbarLayout + Viewpager 总是滚动(Android CoordinatorLayout + AppbarLayout + Viewpager always scrolling)
    问题 我有一个经典的布局,顶部有一个 ToolBar,它下面有一个 TabLayout,还有一个 ViewPager 从 TabLayout 切换选项卡。 当 ViewPager 中的内容可滚动时,ToolBar 应该滚动到视线之外,并且 TabLayout 应该跟随并在到达顶部时粘住。 所有这些在我当前的代码中都很好,除了 ToolBar 始终是可滚动的,无论 ViewPager 的内容大小如何。 请参阅下面的我的代码。 关于如何解决这个问题的任何绝妙的想法? <?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" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.AppBarLayout android:id="@+id
  • ViewHolder 中的嵌套 RecyclerView 破坏了折叠工具栏布局(Nested RecyclerView in ViewHolder breaks Collapsing Toolbar Layout)
    问题 我有一个垂直 RecyclerView 托管在 CoordinatorLayout 中,具有折叠工具栏布局。 此 RecyclerView 的 ViewHolder 包含另一个带有 GridLayoutManager 的 RecyclerView。 这种嵌套的原因是内部 RecyclerView 显示的图片集合可以有 1 到 20 张图片之间的任意位置。 我不知道会有多少张图片,但是Grid的跨度必须始终为3。每次绑定ViewHolder时,我都会调整RecyclerView的布局参数以仅容纳内容。 如果没有 CollapsingToolBarLayout,这很有效。 但是,如果有一个折叠的 ToolBar,用我的手指在内部 RecyclerView 上滚动不会滚动折叠工具栏,但是在另一个 Item 上滚动。 再次强调,在绑定的 ViewHolder 中,如果我开始在嵌套的 RecyclerView 之外的任何其他项目上滚动,滚动工作正常。 但是,如果我在嵌套的 RecyclerView 上开始滚动,则会中断。 是否可以防止内部 RecyclerView 上的滚动拦截而只让 Parent 滚动? 但是,我希望内部 RecyclerView 仍然处理点击。 这是该现象的 YouTube 链接:https://youtu.be/fzj7HmqskzU 这是父
  • 滚动时如何避免 CollapsingToolbarLayout 不被捕捉或“摇摆不定”?(How to avoid CollapsingToolbarLayout not being snapped or being “wobbly” when scrolling?)
    问题 背景 假设您创建了一个应用程序,该应用程序的 UI 与您可以通过“滚动活动”向导创建的 UI 类似,但您希望滚动标志具有对齐功能,如下所示: <android.support.design.widget.CollapsingToolbarLayout ... app:layout_scrollFlags="scroll|exitUntilCollapsed|snap" > 问题 事实证明,在许多情况下,它存在捕捉问题。 有时 UI 不会对齐到顶部/底部,使 CollapsingToolbarLayout 保持在两者之间。 有时它也会尝试捕捉到一个方向,然后决定捕捉到另一个方向。 您可以在此处的附加视频中看到这两个问题。 我试过的 我认为这是我在 RecyclerView 上使用 setNestedScrollingEnabled(false) 时遇到的问题之一,所以我在这里询问了它,但后来我注意到即使有解决方案并且根本不使用此命令,甚至在使用时一个简单的 NestedScrollView(由向导创建),我仍然可以注意到这种行为。 这就是为什么我决定在这里报告这个问题。 可悲的是,我在 StackOverflow 上找不到任何解决这些奇怪错误的方法。 问题 为什么会发生,更重要的是:如何在仍然使用它应该具有的行为的同时避免这些问题? 编辑:这是接受的答案的一个很好的改进的
  • 如何禁用 NestedScrollView&CollapsingToolbarLayout 的滚动,例如当下面没有更多内容时?(How to disable scrolling of NestedScrollView&CollapsingToolbarLayout, for example when there is no more content below?)
    问题 背景 我尝试添加与许多应用程序中显示的相同的功能,其中屏幕的上部区域根据滚动的内容缩小和扩展。 为此,我使用 Google 的设计库,如 CheeseSquare 示例所示。 问题 事实是,无论 NestedScrollView 中有多少内容,它都可以让我滚动到内容的最后一个视图下方,只是为了让我看到操作栏的最终状态,其本身的尺寸最小。 简而言之,这就是我滚动到底部时看到的(CheeseSquare 示例的修改内容): 虽然这是滚动到底部时我想要的(取自通讯录应用程序): 我还试图修复 ThreePhasesBottomSheet 示例中的一个错误,即使它处于偷看状态,也可以在底部工作表内容中滚动。 要重现,开始水平滚动(这不会做任何事情,因为没有任何东西可以这样滚动)然后垂直滚动,这会以某种方式触发底部工作表内容的滚动。 因此,我需要在“transformView()”方法中禁用滚动,以防“transformView()” 这是使用正常用法的工作方式: 这就是它与不阻止滚动的错误的行为方式: 我试过的 我尝试使用“layout_scrollFlags”标志,将高度更改为 wrap_content,并删除 clipToPadding 和 fitsSystemWindows 属性。 这是示例 XML 文件,我已将其修改为仅包含一个 cardView 而不是许多:
  • 向下滑动时工具栏会扩展(Toolbar expands on swipe down)
    问题 在我的应用程序中,我有一个折叠的工具栏。 如果我启动一个特定的片段,我想折叠工具栏,使其表现得像一个“正常”片段,并且用户无法自己消耗它。 这是我用于工具栏的布局: <android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" > <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginEnd="64dp" app
  • 带有 ViewPager 的 CollapsingToolbarLayout(CollapsingToolbarLayout with a ViewPager)
    问题 我正在尝试使用 CollapsingToolbarLayout 来拥有一个带有 ViewPager 的可折叠工具栏,该工具栏在向上滚动时会逐渐消失,但如果存在 ViewPager,我似乎失去了向上滚动的能力。 ViewPager 应该在工具栏中显示多个图像。 这是 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:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay
  • 使用带有 tabLayout 的导航视图(Using navigationView with tabLayout)
    问题 所以我最近一直在努力更新我的应用程序以使用新的材料设计支持库。 我的应用程序有一个带有 drawerLayout 和导航视图的主要活动。 app的主要内容通过fragments展示在frameLayout中。 但是,我现在正在尝试将材料选项卡添加到导航抽屉的片段之一。 但是,我不确定如何在保持我的片段在导航抽屉中正常工作的同时实现这一点。 我试图实现的一个很好的例子如下所示: 在这个应用程序(谷歌播放音乐)中,只有一些导航抽屉的项目有标签,而其他的没有。 所以我的问题是,我将如何实现这一点? (不是在寻找代码,只是我的布局应该如何组织的概述) 回顾/澄清:我有一个主布局,其中包含一个 frameLayout(用于我的应用程序的内容)和一个 navigationView(用于导航不同的项目片段)。 然后我有一个侦听器,它用项目的相应片段替换主布局的 frameLayout。 现在,我只需要向这些片段之一添加选项卡(以在其他 4 个片段之间导航)。 我还使用了一个工具栏,我将其作为单独的布局包含在内。 任何建议表示赞赏。 如果我的描述有点混乱,我很抱歉; 我会澄清任何必要的细节。 回答1 我不能推荐 Yiyo 的建议。 如果您打算拥有具有不同布局的 Fragment,您应该让 Fragment 在 XML 中自定义这些布局。 这就是 Toolbar 的引入对 Android
  • 半透明/透明状态栏+ CoordinatorLayout +工具栏+片段(Translucent/Transparent status bar + CoordinatorLayout + Toolbar + Fragment)
    问题 我有以下设置: 我正在使用AppCompat MainActivity,其中包含一个片段并具有一个工具栏,向下滚动时隐藏使用RecyclerView Fragment 所有适合屏幕的视图在xml布局中均具有相应的android:fitsSystemWindows="true" 问题是,在这种情况下,我无法使状态栏透明。 我要做的是: 创建活动并调用setContent 然后,我尝试将活动调整为以编程方式获取如下所示的半透明工具栏: @TargetApi(Build.VERSION_CODES.LOLLIPOP) public void themeNavAndStatusBar(Activity activity) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) return; Window w = activity.getWindow(); w.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); w.setFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT