我想添加一个布局,当 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
我上面有 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
几天来我一直在寻找这个问题的答案。网上没有任何东西我可以使用。
我的问题是,当向 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) 现在,我看起来很正常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
我在滚动折叠 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
我在 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。
任何形式的帮助将不胜感激。
我正在构建一个应用程序,它使用 来ViewPager2水平滚动页面,每个页面都有一个垂直滚动的内容RecyclerView,其中每个列表的第一个位置都有一行带有水平滚动小部件(例如另一个)RecyclerView或ViewPager2附加到寻呼机指示器类型小部件,如从下图。
父 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
我正在尝试实现如下所示的行为(在图片上),因此我需要拉伸 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) 我正在尝试在应用程序栏中添加线性渐变,但到目前为止我还没有设法做到这一点。有谁知道如何将其添加到我的应用程序栏中?谢谢
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) 我想删除工具栏中内置后箭头和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