标签: android-appbarlayout

如何在 recyclerview 滚动时隐藏/显示布局(如 twitter 的新推文布局)

我想添加一个布局,当 recyclerview 滚动时隐藏/显示。当 recyclerview 向下滚动时,该布局将隐藏,当 recyclerview 向上滚动时,该布局将显示,就像 Twitter 的新推文布局一样。我可以为 appbarlayout 做到这一点,但我不能为该布局做到这一点。我怎样才能做到这一点?

http://i.hizliresim.com/rVyDq3.png

紫色布局将隐藏像操作栏一样的显示:

http://i.hizliresim.com/gAMp92.png

这是我的布局文件:

<android.support.v4.widget.DrawerLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:elevation="7dp">

<!-- my main content -->
<android.support.design.widget.CoordinatorLayout
    android:id="@+id/coordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.Toolbar
            android:id="@+id/tool_bar"
            style="@style/ToolBarStyle"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            android:minHeight="?attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways" />

        <LinearLayout
            android:orientation="vertical"
            android:id="@+id/linearLayout"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:background="@color/color_accent_pink">

        </LinearLayout>

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


    <android.support.v7.widget.RecyclerView
        android:id="@+id/newsRecyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        android:clickable="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <!-- that layout will hide/show when recyclerview scroll -->
    <LinearLayout
        android:orientation="horizontal"
        android:id="@+id/takimlar"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="@color/bg_group_item_swiping_active_state"
        android:layout_gravity="bottom" >

    </LinearLayout>

</android.support.design.widget.CoordinatorLayout>

<!-- …
Run Code Online (Sandbox Code Playgroud)

android-layout android-recyclerview android-collapsingtoolbarlayout android-appbarlayout

5
推荐指数
1
解决办法
1万
查看次数

如何检测 RecyclerView 何时滚动到最顶部位置

我上面有 RecyclerView,我有一个 AppBarLayout,它的高度大于 255 像素。当用户滚动 RecyclerView 时,AppBarLayout 会出现问题。为了避免这种情况,我决定手动扩展 AppBarLayout。我的 RecyclerView 由 GridLayoutManager 制成,跨度为 3。我使用下面的代码来收听 RecyclerView topreach

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
        if (newState == RecyclerView.SCROLL_STATE_IDLE) {
            int firstVisiblePosition = ((LinearLayoutManager)recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
            if (firstVisiblePosition == 0) {
                appBarLayout.setExpanded(true, true);
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

android gridlayoutmanager android-recyclerview android-appbarlayout

5
推荐指数
1
解决办法
6560
查看次数

来自 AppBarLayout 的 OnOffsetChangedListener 的 onOffsetChanged 方法被不断调用

几天来我一直在寻找这个问题的答案。网上没有任何东西我可以使用。

我的问题是,当向 AppBarLayout 添加 OnOffsetChangedListener 时,它的方法 (onOffsetChaned) 会被一遍又一遍地调用,即使我没有触摸屏幕。此外,verticalOffset 的值永远不会改变,工具栏或 AbbBarLayout 返回的 getHeight() 值也不会改变。

我认为重要的是要补充一点,这也是使用来自 Android Studio 的主细节流模板发生的,除了将代码添加到活动之外,无需更改任何其他内容,因此我认为这不是我的代码中的内容。

提前致谢。

这是我正在使用的代码

appbarLayout = (AppBarLayout) findViewById(R.id.app_bar);
    appbarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
        @Override
        public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
            showToast(String.valueOf(appBarLayout.getHeight()));
            if (Math.abs(verticalOffset) == appBarLayout.getTotalScrollRange()) {
                showToast("Collapsed");
            } else if (verticalOffset == 0) {
                showToast("Expanded");
            } else {
               showToast("Scrolling");
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

这是我的 XML 文件

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".views.ActivityTaskList"
    tools:ignore="MergeRootFrame">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="170dp"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_width="match_parent" …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-appbarlayout

5
推荐指数
1
解决办法
3010
查看次数

工具栏中的自定义布局,下面是 TabLayout

现在,我看起来很正常Toolbar。我想要做的是在Toolbar和之间添加自定义布局TabLayout,如下图所示:

在此处输入图片说明

左边是我Toolbar现在的样子,右边是我想要的样子。

如您所见,我想在布局中添加一个ImageView和两个TextViews。

我怎样才能做到这一点?

这是我目前的布局:

<?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: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/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tablayout"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            app:layout_scrollFlags="scroll|enterAlways" />

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

    <android.support.v4.view.ViewPager
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

android android-layout android-studio android-toolbar android-appbarlayout

5
推荐指数
1
解决办法
3300
查看次数

折叠 AppBarLayout 不使用 TabLayout 和 NestedScrollView 滚动

我在滚动折叠 AppBar 时遇到问题,当我尝试滚动它触摸 AppBarLayout 部分时。而且它有时滚动不顺畅。

这是问题的简短(1 米 30 秒)视频https : //www.youtube.com/watch?v=n32N9Z4S3SA&feature=youtu.be

这是简单项目的链接(仅在 github 上有此问题): https : //github.com/yozhik/Reviews/tree/master/app/src/main/java/com/ylet/sr/review

我正在使用:com.android.support : appcompat-v7 : 27.1.1

异地存在问题:https : //issuetracker.google.com/issues/37050152

情况如何:https : //www.youtube.com/watch?v=xWadOVEATSY&feature=youtu.be

应该如何:https : //www.youtube.com/watch?v=J8ITp6RusZo&feature=youtu.be

有人知道如何解决您在视频中看到的这个问题吗?我创建了绝对简单的布局以避免任何副作用,但错误仍然重现。提前致谢。

描述:

CollapsingActivity- 活动与Collapsing AppBarLayout。它将一两个片段加载到“ fragment_content_holder”中,并且必须TabLayout 在视图寻呼机中的片段之间切换。

在活动方法中onCreate()- 我只是模拟对服务器 ( loadData) 的请求,并且当加载了一些假数据时 - 我在第一次调用时在视图寻呼机中显示片段 - 我正在创建新的TabMenuAdapter扩展FragmentPagerAdapter,用片段填充它并将链接保存到实例. 在下一次调用中 - 我不会从头开始创建片段,而只是用新数据填充它们。

MenuFragment1, MenuFragment1- 两个碎片。 MenuFragment1- 具有 public void 方法setupData(SomeCustomData data) …

android android-fragments android-collapsingtoolbarlayout android-appbarlayout android-nestedscrollview

5
推荐指数
1
解决办法
1531
查看次数

如果片段包含 AppBarLayout,BottomNavigationView 不会在片段内滚动时隐藏

我在 Android 中使用 coordinatorLayout 在片段内滚动和检测它时遇到很多问题。我有一个包含 3 个片段的“MainActivity”。在其中一个片段中,我有一个应用栏,当滚动片段时它会折叠。我已经设法做到了这一点,但如果我设置滚动行为以允许这样做,我的 BottomNavigationView (位于 mainactivity.xml 中)不会对滚动做出反应。代码是这样的:

片段1.xml

<android.support.design.widget.CoordinatorLayout
...
...>
    <android.support.design.widget.AppBarLayout
 ...
 ...>
        <android.support.design.widget.CollapsingToolbarLayout
                 app:layout_scrollFlags="scroll|exitUntilCollapsed"
   ...>
            <android.support.v7.widget.Toolbar
     .../>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

   <android.support.v4.widget.NestedScrollView
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
   </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

MainActivity.xml

<android.support.design.widget.CoordinatorLayout
.../>
    <FrameLayout
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
 .../>
    <android.support.design.widget.BottomNavigationView
      app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
.../>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

现在,这已经足够好了,因为当我在片段内滚动时,我的 AppBar 会折叠到标题中(这就是我想要的),但我的 BottomNavigationView 对滚动没有反应。

我发现如果我添加这一行

app:layout_behavior="@string/appbar_scrolling_view_behavior"
Run Code Online (Sandbox Code Playgroud)

在 AppBarLayout xml 声明中,我让 BottomView 在滚动事件上折叠(当我向上滚动时,它会再次显示)。所以基本上要么我有能力折叠片段内的应用程序栏,要么当我检测到片段内的滚动事件时我有能力隐藏 BottomNavigationView。

任何形式的帮助将不胜感激。

android scroll android-appbarlayout bottomnavigationview

5
推荐指数
1
解决办法
1588
查看次数

具有 CollapsingToolbarLayout 的垂直 Recyclerview 中的水平滚动 Recyclerview

我正在构建一个应用程序,它使用 来ViewPager2水平滚动页面,每个页面都有一个垂直滚动的内容RecyclerView,其中每个列表的第一个位置都有一行带有水平滚动小部件(例如另一个)RecyclerViewViewPager2附加到寻呼机指示器类型小部件,如从下图。

父 ViewPager2 是 CoordinatorLayout 的子级,当 RecyclerView 垂直滚动时,它会处理折叠顶部内容。然后,此 ViewPager2 会膨胀水平滚动的片段。所以我们有parent layout

-- CoordinatorLayout 
   -- FrameLayout - has appbar scrolling behavior 
      -- ViewPager2
   -- AppBarLayout
      -- CollapsingToolbarLayout
         -- ImageView - background
         -- Toolbar
         -- ConstraintLayout - Holds title and date
Run Code Online (Sandbox Code Playgroud)

父 ViewPager2 child fragments' layout

-- FrameLayout
   -- RecyclerView
   -- Pager Indicator 
Run Code Online (Sandbox Code Playgroud)

RecyclerView 内容的第一行具有相同的布局:

-- FrameLayout
   -- RecyclerView
   -- Pager Indicator 
Run Code Online (Sandbox Code Playgroud)

展开状态

您可以从上面的屏幕截图中看到,第一次加载时RecyclerView重叠,AppBarLayout这是正确的行为。marginTop我向的父布局添加了 negative …

android-recyclerview android-collapsingtoolbarlayout android-appbarlayout android-viewpager2

5
推荐指数
1
解决办法
1278
查看次数

如何拉伸协调器布局内的内容以填充空白空间?

我正在尝试实现如下所示的行为(在图片上),因此我需要拉伸 AppBarLayout 下面的所有内容。我已经通过实现自定义 CoordinatorLayout 行为以某种方式实现了这一目标,但该解决方案在 RecyclerView 内的视图回收和整体性能方面存在一些问题。有没有更简单的解决方案来实现我想要的?

在此输入图像描述

public class TestBehaviour48Margin extends CoordinatorLayout.Behavior {

    public TestBehaviour48Margin() {
    }

    public TestBehaviour48Margin(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean layoutDependsOn(@NonNull CoordinatorLayout parent, @NonNull View child, @NonNull View dependency) {
        return dependency instanceof AppBarLayout;
    }

    @Override
    public boolean onDependentViewChanged(@NonNull CoordinatorLayout parent, @NonNull View child, @NonNull View dependency) {
        AppBarLayout appBarLayout = (AppBarLayout) dependency;
        val toolbar = appBarLayout.findViewById(R.id.toolbar);
        int range = appBarLayout.getTotalScrollRange();
        int totalHeight = parent.getHeight();
        int appBarHeight = appBarLayout.getHeight();
        int toolbarHeight …
Run Code Online (Sandbox Code Playgroud)

android android-coordinatorlayout android-appbarlayout

5
推荐指数
0
解决办法
453
查看次数

如何在 App Bar Flutter 中创建线性渐变?

我正在尝试在应用程序栏中添加线性渐变,但到目前为止我还没有设法做到这一点。有谁知道如何将其添加到我的应用程序栏中?谢谢

decoration: BoxDecoration(
                gradient: LinearGradient(
                    colors: [const Color(0xFFF06292), const Color(0xff2A75BC)]),
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样

class RegisterAgree extends StatefulWidget {
  @override
  _RegisterAgreeState createState() => _RegisterAgreeState();
}

class _RegisterAgreeState extends State<RegisterAgree> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.pink,
        title: Row(
          children: <Widget>[
            Image.asset(
              'assets/images/logox.png',
              fit: BoxFit.cover,
              height: 45.0,
            )
          ],
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

gradient dart android-appbarlayout flutter flutter-appbar

5
推荐指数
2
解决办法
2248
查看次数

删除工具栏中后退箭头和图像之间的空格

我想删除工具栏中内置后箭头和imageview之间的空格.

下面是我的xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".activities.AppBaseActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/colorPrimary"
            android:contentInsetStart="0dp"
            android:contentInsetLeft="0dp"
            android:contentInsetRight="0dp"
            android:contentInsetEnd="0dp"
            app:contentInsetLeft="0dp"
            app:contentInsetStart="0dp"
            app:contentInsetRight="0dp"
            app:contentInsetEnd="0dp"
            app:popupTheme="@style/AppTheme.PopupOverlay">

            <RelativeLayout
                android:id="@+id/rl_User_Profile"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <ImageView
                    android:id="@+id/imageView_User_Image"
                    android:layout_width="150dp"
                    android:layout_height="40dp"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_centerVertical="true"
                    android:layout_margin="1dp"
                    android:src="@drawable/app_logo" />

                <itcube.spcl.mobileapp.ui.view.CustomTextView
                    app:font="droid-serif.regular.ttf"
                    android:id="@+id/textView_User_Name"
                    android:text="jkdfsbjkbdkjsbf"
                    android:layout_marginLeft="3dp"
                    android:layout_toRightOf="@+id/imageView_User_Image"
                    android:textAppearance="?android:attr/textAppearanceSmall"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_alignTop="@+id/imageView_User_Image"/>
            </RelativeLayout>
        </android.support.v7.widget.Toolbar>
    </android.support.design.widget.AppBarLayout>
    <include layout="@layout/content_app_base" />

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

样式xml

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
Run Code Online (Sandbox Code Playgroud)

PSA快照显示我必须删除的空间.Java文件只是有代码来定义工具栏和设置主页按钮启用意味着后退箭头.

在此输入图像描述

android android-styles android-toolbar android-coordinatorlayout android-appbarlayout

4
推荐指数
3
解决办法
2827
查看次数