Android 在AppBarLayout中的工具栏下创建新布局

Android 在AppBarLayout中的工具栏下创建新布局,android,android-toolbar,swiperefreshlayout,android-appbarlayout,Android,Android Toolbar,Swiperefreshlayout,Android Appbarlayout,我使用SwipeRefreshLayout作为布局的根元素,因为我需要刷新屏幕上的所有内容。布局如下所示: 如何在工具栏下创建刷新圈?您的工具栏应该在SwipeRefreshLayout之外。按如下方式做 <CoordinatorLayout> <AppBarLayout> <Toolbar /> <FrameLayout> ... <

我使用
SwipeRefreshLayout
作为布局的根元素,因为我需要刷新屏幕上的所有内容。布局如下所示:



如何在工具栏下创建刷新圈?

您的
工具栏
应该在
SwipeRefreshLayout
之外。按如下方式做

<CoordinatorLayout>
    <AppBarLayout>
        <Toolbar />
            <FrameLayout>
                ...
            </FrameLayout>
        <TabLayout />
    </AppBarLayout>
    <SwipeRefreshLayout>
        <NestedScrollView>
            <ViewPager />
    </SwipeRefreshLayout>
</CoordinatorLayout>

...

您的
工具栏应位于
SwiperFreshLayout
之外。按如下方式做

<CoordinatorLayout>
    <AppBarLayout>
        <Toolbar />
            <FrameLayout>
                ...
            </FrameLayout>
        <TabLayout />
    </AppBarLayout>
    <SwipeRefreshLayout>
        <NestedScrollView>
            <ViewPager />
    </SwipeRefreshLayout>
</CoordinatorLayout>

...

您是否确实要显示圆?如果要在FrameLayout上显示,应将SwiperFreshLayout置于FrameLayout之上,而不将SwiperFreshLayout设置为根视图

试试这个,让我知道它是否有效

<CoordinatorLayout>
    <NestedScrollView>
        <ViewPager />
    <AppBarLayout>
        <Toolbar />
        <SwipeRefreshLayout>
           <FrameLayout>
              ...
           </FrameLayout>
        </SwipeRefreshLayout>
    <TabLayout />
</CoordinatorLayout>

...

您是否确实要显示圆?如果要在FrameLayout上显示,应将SwiperFreshLayout置于FrameLayout之上,而不将SwiperFreshLayout设置为根视图

试试这个,让我知道它是否有效

<CoordinatorLayout>
    <NestedScrollView>
        <ViewPager />
    <AppBarLayout>
        <Toolbar />
        <SwipeRefreshLayout>
           <FrameLayout>
              ...
           </FrameLayout>
        </SwipeRefreshLayout>
    <TabLayout />
</CoordinatorLayout>

...

您似乎想要实现一个,如中所述。为此,应使用
setProgressViewEndTarget()
setProgressViewOffset()
方法:

// This method will offset the end of the indicator animation
int target = getResources().getDimensionPixelSize(R.dimen.indicator_end_target);
mSwipeRefreshLayout.setProgressViewEndTarget(true, target);

// This method allows you to set both the start and end values for the indicator animation
int start = getResources().getDimensionPixelSize(R.dimen.indicator_start);
int end = getResources().getDimensionPixelSize(R.dimen.indicator_end);
mSwipeRefreshLayout.setProgressViewOffset(true, start, end);

在这些方法中,通过将第一个参数设置为
true
,指示器将在其进入视图时设置其缩放动画,而不仅仅是被包含视图的边缘剪裁。

似乎您想要实现一个,如中所述。为此,应使用
setProgressViewEndTarget()
setProgressViewOffset()
方法:

// This method will offset the end of the indicator animation
int target = getResources().getDimensionPixelSize(R.dimen.indicator_end_target);
mSwipeRefreshLayout.setProgressViewEndTarget(true, target);

// This method allows you to set both the start and end values for the indicator animation
int start = getResources().getDimensionPixelSize(R.dimen.indicator_start);
int end = getResources().getDimensionPixelSize(R.dimen.indicator_end);
mSwipeRefreshLayout.setProgressViewOffset(true, start, end);


在这些方法中,通过将第一个参数设置为
true
,指示器将在进入视图时设置其缩放动画,而不仅仅是被包含视图的边缘剪裁。

您到底想做什么?@VishalPatoliyaツ 只需“在工具栏下画一个刷新圈”此布局用于活动或片段?是否删除要刷新
框架布局中的内容以及
查看页面中的内容?但是您希望
SwipeRefreshLayout
指示器显示在
FrameLayout
中内容的顶部吗?您希望能够下拉
FrameLayout
ViewPager
来刷新这两组内容吗?您实际想做什么?@VishalPatoliyaツ 只需“在工具栏下画一个刷新圈”此布局用于活动或片段?是否删除要刷新
框架布局中的内容以及
查看页面中的内容?但是您希望
SwipeRefreshLayout
指示器显示在
FrameLayout
中内容的顶部吗?您希望能够下拉
FrameLayout
以及
ViewPager
以刷新这两组内容吗?那么,如果没有工具栏,AppBarLayout应该如何正常工作?谢谢,但这将使SwipeRefreshLayout完全低于AppBarLayout,包括其中的工具栏和其他视图。我只想让圆圈出现在工具栏下方。这对我来说几乎是不可能的。@BetaKuang您可以做的另一个选择是使用这个布局视图的层次结构,在SwiperFreshLayout的onRefresh()中,您可以编写代码来刷新所有视图。那么,如果没有工具栏,AppBarLayout应该如何正常工作?谢谢,但这将使SwiperFreshLayout完全低于AppBarLayout,包括工具栏和其中的其他视图。我只想让圆圈出现在工具栏下方。这对我来说几乎是不可能的。@BetaKuang您可以做的另一种选择是使用布局视图的层次结构,在SwipeRefreshLayout的onRefresh()中,您可以编写代码来刷新所有视图。谢谢您的回答。如果
FrameLayout
具有固定的高度,这可能会起作用,因为
SwipeRefreshLayout
将强制子视图与整个大小匹配,因此
SwipeRefreshLayout
的高度不能设置为
wrap\u content
。不幸的是,在我的例子中,
FrameLayout
的高度是动态的,因此此解决方案将使
FrameLayout
完全不可见。您能否指定在视图中打开,或在FrameLayout和ViewPager上启动刷新操作?谢谢您的回答。如果
FrameLayout
具有固定的高度,这可能会起作用,因为
SwipeRefreshLayout
将强制子视图与整个大小匹配,因此
SwipeRefreshLayout
的高度不能设置为
wrap\u content
。不幸的是,在我的例子中,
FrameLayout
的高度是动态的,因此此解决方案将使
FrameLayout
完全不可见。您能否在视图中指定on或要在FrameLayout和ViewPager上启动刷新操作?这可能是目前为止最好的解决方案。谢谢!我确信“共面指示器”是一个精确的术语,但我无法忘记这样一个事实,那就是McFly似乎会将某些东西连接到他的磁通电容器上。这可能是目前为止最好的解决方案。谢谢!我确信“共面指示器”是一个精确的术语,但我无法忘记这样一个事实,那就是McFly似乎会将某些东西连接到他的磁通电容器上。