我需要向下滚动浏览我的NestedScrollView以使用Espresso测试我的xml文件,但是我收到错误消息:"在视图上执行'滚动到'时出错",ID为:
其他几个帖子似乎也有类似的问题.
我遵循了以下说明:Android espresso NestedScrollView,如何滚动到底部
现在我得到前面提到的错误,并发现这篇文章:尝试滚动查看,但不显示视图
我的NestedScrollView中没有填充 - 我甚至尝试从XML中删除填充,用于测试目的,但它没有任何区别.
这是我的测试(到目前为止它不应该做任何事情,但向下滚动):
@Test
public void testScrollDownAbilityOfDetailsScrollView(){
goToSpecificItemOnStream(streamItemWithOneImage);
onView(withId(R.id.end_of_details))
.perform(ScrollToAction.betterScrollTo());
}
Run Code Online (Sandbox Code Playgroud)
它使用自定义的Scroll To Action类:
public final class ScrollToAction implements ViewAction {
private static final String TAG = ScrollToAction.class.getSimpleName();
@SuppressWarnings("unchecked")
@Override
public Matcher<View> getConstraints() {
return allOf(withEffectiveVisibility(Visibility.VISIBLE), isDescendantOfA(anyOf(
isAssignableFrom(ScrollView.class), isAssignableFrom(HorizontalScrollView.class), isAssignableFrom(NestedScrollView.class))));
}
@Override
public void perform(UiController uiController, View view) {
if (isDisplayingAtLeast(80).matches(view)) {
Log.i(TAG, "View is already displayed. Returning.");
return;
}
Rect rect = new Rect();
view.getDrawingRect(rect);
if (!view.requestRectangleOnScreen(rect, true /* immediate …Run Code Online (Sandbox Code Playgroud) 我正在制作类似于最近android的状态栏的布局.
我有两个Views内部容器.ViewPager和RecyclerView.默认行为应该是当我滚动时RecyclerView,我想ViewPager减小尺寸,反之亦然.
逻辑:
viewPagerMaxHeight = 200;
if scrollTop
is ViewPager.height > viewPagerMaxHeight?
YES: Prevent Scroll and Decrease ViewPager size apropriatry
No: Scroll RecyclerView
if scrollBottom
did we scroll to position 0?
YES: Start increasing ViewPager size
No: Scroll RecyclerView
Run Code Online (Sandbox Code Playgroud)
几个注意事项:
- RecyclerView包含各种尺寸的物品. - 有时会删除和添加项目 - 这是一个简单的RecyclerView,而不是在通知中它们相互折叠.
我可以自己构建大部分逻辑但是我无法做出适当的监听器RecyclerView,它将返回滚动的方向和数量.防止RecyclerView滚动是一个奖励
编辑:
我在github上做了一个例子
v.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, …Run Code Online (Sandbox Code Playgroud) android android-recyclerview nestedscrollview android-nestedscrollview
扑文档显示演示为SliverAppBar+ TabBar+ TabBarView with ListView的使用NestedScrollView,这是一个有点复杂,所以我不知道是否有一个简单而明确的方式来实现它。我尝试了这个:
CustomScrollView
slivers:
SliverAPPBar
bottom: TabBar
TabBarView
children: MyWidget(list or plain widget)
Run Code Online (Sandbox Code Playgroud)
出现错误:
扑:下列说法被扔建筑滚动(axisDirection:对,物理:
扑:一个RenderViewport预计类型RenderSliver的孩子,但收到类型_RenderExcludableScrollSemantics的孩子。
扑:RenderObjects期望特定类型的孩子,因为他们与布局过程中他们的孩子协调例如,RenderSliver不能是RenderBox的子级,因为RenderSliver不了解RenderBox布局协议。
和
flutter:引发了另一个异常:'package:flutter / src / widgets / framework.dart':失败的断言:3497行pos 14:'owner._debugCurrentBuildTarget == this':不正确。
这是我的代码:
import 'package:flutter/material.dart';
main(List<String> args) {
runApp(MyScrollTabListApp());
}
class MyScrollTabListApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(title: "aa", home: MyScrollTabListHomePage());
}
}
class MyScrollTabListHomePage extends StatefulWidget {
@override
MyScrollTabListHomePageState createState() {
return new MyScrollTabListHomePageState();
}
}
class MyScrollTabListHomePageState …Run Code Online (Sandbox Code Playgroud) 我想在NestedScrollView中放置一个RecylerView,如下所示
activity_service_menu.xml
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HELLO" />
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
Run Code Online (Sandbox Code Playgroud)
ServiceMenuActivity.java
public class ServiceMenuTActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_service_menu_t);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
RecyclerView rv = (RecyclerView) findViewById(R.id.rv);
rv.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
rv.setHasFixedSize(true);
rv.setAdapter(new RvAdapter());
}
private static class RvAdapter extends RecyclerView.Adapter<RvAdapter.RvHolder> {
@Override
public RvHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View serviceMenuItemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_service_menu, parent, false);
return new RvHolder(serviceMenuItemView);
} …Run Code Online (Sandbox Code Playgroud) android scrollview android-layout android-recyclerview nestedscrollview
我有一个名为的布局FloatingActionButton内部.activity_main.xmlfabBtn
我的应用程序是用一个ViewPager和三个FragmentsI 构建的FloatingActionButton,我希望在第一次Fragment检测到滚动时隐藏它,但是NullPointerException如果用户开始滚动,我会继续获取.
我相信可能是我的片段无法FloatingActionButton从activity_main.xml布局中获取?
这是我的 activity_main.xml
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/rootLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="lh.com.newme.MainActivity"
xmlns:fab="http://schemas.android.com/tools">
<android.support.design.widget.AppBarLayout
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="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:layout_scrollFlags="scroll|snap"/>
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:tabMode="fixed"
app:layout_scrollFlags="snap|enterAlways"/>
</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:background="#ffffff" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fabBtn"
android:layout_marginBottom="@dimen/codelab_fab_margin_bottom"
android:layout_marginRight="@dimen/codelab_fab_margin_right"
android:layout_width="wrap_content"
fab:fab_type="normal"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
app:backgroundTint="@color/fab_ripple_color"
android:src="@drawable/ic_plus"
app:fabSize="normal"
/>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
这是我Fragment想要隐藏的第一个FloatingActionButton:
public class Ernaehrung …Run Code Online (Sandbox Code Playgroud) 我的目标是让NestedScrollView包含多个包含RecyclerViews的子CardView.
我当前的xml看起来像这样:
<CardView>
<RecyclerView/>
</CardView>
<CardView>
<RecyclerView/>
</CardView>
</NestedScrollView>
Run Code Online (Sandbox Code Playgroud)
如果我在RecyclerViews上将nestedScrollViewEnabled设置为false,则所有内容似乎都按预期工作.但是,recyclerviews中的行不会被回收.调用layoutManager.findFirstVisibleItemPosition()始终返回0,并layoutManager.findLastVisibleItemPosition()始终返回列表中的最后一个项目位置.
有什么建议?
我有一个NestedScrollView(默认滚动活动的一部分),它包含一个CoordinatorLayout和RecyclerView来显示带有一些信息的卡片.布局设计为允许卡片在屏幕外显示太多并且让用户向下滚动它们,但是由于某种原因,滚动没有动量到它应该.我环顾四周,前面的一个问题讲述了如何在ScrollView中禁用intertial scroll(Android ScrollView禁用惯性滚动),所以我尝试反过来:
NestedScrollView mgScrollView = (NestedScrollView) findViewById(R.id.my_games_scroll_view);
mgScrollView.setSmoothScrollingEnabled(true);
Run Code Online (Sandbox Code Playgroud)
但这并没有实现.我测试了mgScrollView.setVerticalScrollBarEnabled(true); 看看我是否甚至将代码应用于正确的视图,因此滚动条也没有显示出来.所以现在我很困惑我是否将这些方法应用到正确的视图,但由于我没有任何其他ScrollViews,我不知道如果我不正确应该在哪里.我知道我可以在xml中添加滚动条,但我还没有找到惯性滚动的xml代码.有没有办法通过Java或xml添加惯性?
这是content_my_games.xml的代码,它是卡的布局(不要与activity_my_games.xml混淆,后者包含CollapsingToolbarLayout和FAB的代码)
谢谢
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView 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/my_games_scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.abhinav.sportswowandroid.MyGamesActivity"
tools:showIn="@layout/activity_my_games">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
tools:context=".MyGamesActivity">
<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=".MyGamesActivity"
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="android.support.design.widget.AppBarLayout$ScrollingViewBehavior"
/>
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
Run Code Online (Sandbox Code Playgroud) android scrollview android-coordinatorlayout nestedscrollview
背景:
我使用的是ViewPager的变体,它不是在水平方向上滚动,而是在垂直方向上滚动.
VerticalViewPager:
https ://android.googlesource.com/platform/packages/apps/DeskClock/+/master/src/com/android/deskclock/VerticalViewPager.java
android.support.v4.app.FragmentStatePagerAdapter用于设置内容VerticalViewPager.
我创建并返回一个新的实例android.support.v4.app.Fragment,从FragmentStatePagerAdapter每一次getItem()的FragmentStatePagerAdapter下面所列称为:
@Override
public Fragment getItem(int position) {
return PreviewFragment.getNewFragmentInstance(position);
}
Run Code Online (Sandbox Code Playgroud)
PreviewFragment呈现可能不适合屏幕的内容.为了显示不适合屏幕的所有内容,将其android.support.v4.widget.NestedScrollView用作PreviewFragment布局的父元素 .
问题:
内容PreviewFragment按预期滚动到位置0.但是,为了切换到下一页,必须多次执行甩动或滑动操作,因此向位置1的页面滑动是非常困难的.
此外,投掷或滑回到位置0非常困难或几乎不可能.
需要:
Fling或swipe或切换到下一个实例PreviewFragment应该是平滑的.换句话说,滚动内容应该是平滑的,同时请记住,滑动到下一页也应该顺利工作.
android scrollview android-viewpager nestedscrollview android-nestedscrollview
我想SliverAppBar在ScrollablePositionedList.builder滚动时隐藏。这是我在此处包含的相关代码段。
NestedScrollView(
headerSliverBuilder: (context, innerBoxIsScrolled) => [
SliverAppBar(
backgroundColor: Colors.blue,
expandedHeight: 112,
snap: true,
pinned: false,
floating: true,
forceElevated: true,
actions: <Widget>[
IconButton(
icon: Icon(Icons.event),
)
],
flexibleSpace: SafeArea(
child: Column(
children: <Widget>[
Container(
height: kToolbarHeight,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Title',
style: Theme.of(context)
.textTheme
.title
.copyWith(
fontSize: 16, color: Colors.white),
),
SizedBox(
height: 2,
),
Text(
'Date',
style: Theme.of(context)
.textTheme
.caption
.copyWith(
fontSize: 10, color: Colors.white),
), …Run Code Online (Sandbox Code Playgroud) scroll-position nestedscrollview flutter flutter-layout sliverappbar
我在使用CollapsingToolbarLayout的RecyclerView中发现了奇怪的行为.当我滚动RecyclerView时 - 它完美地工作.但是当我试图把它扔掉并且足够快地停止它时 - 我可以看到,RecyclerView被"内部"滚动.
糟糕的行为:
在CollapsingToolbarLayout完全折叠之前,RecyclerView不应该是可滚动的,但它是(在normall滚动中,一切都很完美,只有在投掷时才出现问题).
我的布局看起来像这样:
<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"
tools:context="kg.nongrate.arseniii.collapsingtoolbarlayouttest.MainActivity">
<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"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<TextView
android:layout_width="match_parent"
android:layout_height="240dp"
android:layout_marginTop="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:text="1. Hello World!\n\n\n2. Hello World!\n\n\n3. Hello World!"
android:textColor="@color/colorAccent"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.7"
android:gravity="center" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimaryDark"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0cc"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
以下是显示我的意思的来源和两个视频: https://NonGrate@bitbucket.org/NonGrate/collapsingtoolbarlayout-recyclerview-bug.git
android android-layout android-recyclerview android-collapsingtoolbarlayout nestedscrollview
nestedscrollview ×10
android ×8
scrollview ×3
flutter ×2
java ×2
android-collapsingtoolbarlayout ×1
sliverappbar ×1
testing ×1