Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 4.2或更高版本上的CoordinatorLayout、ViewPager和requestLayout/onMeasure/onLayout存在问题_Android_Android Fragments_Android Viewpager_Android Coordinatorlayout - Fatal编程技术网

Android 4.2或更高版本上的CoordinatorLayout、ViewPager和requestLayout/onMeasure/onLayout存在问题

Android 4.2或更高版本上的CoordinatorLayout、ViewPager和requestLayout/onMeasure/onLayout存在问题,android,android-fragments,android-viewpager,android-coordinatorlayout,Android,Android Fragments,Android Viewpager,Android Coordinatorlayout,关于一个非常奇怪的问题,我需要一些帮助。看来我是唯一一个偶然发现它的人。在我的应用程序中,requestLayout()和invalidate()在运行Android 4.0、4.1和4.2的设备上的嵌套片段中都没有任何效果(在模拟器和真实设备上都进行了测试) 当我导航到必须调用requestLayout()的位置时,活动的布局层次结构包含一个主细节流,大致如下所示(请注意,我将所有片段动态添加到FrameLayout包装器): master/> 详细信息> 更详细地说 因为我的页脚可以扩展以

关于一个非常奇怪的问题,我需要一些帮助。看来我是唯一一个偶然发现它的人。在我的应用程序中,requestLayout()和invalidate()在运行Android 4.0、4.1和4.2的设备上的嵌套片段中都没有任何效果(在模拟器和真实设备上都进行了测试)

当我导航到必须调用requestLayout()的位置时,活动的布局层次结构包含一个主细节流,大致如下所示(请注意,我将所有片段动态添加到FrameLayout包装器):


master/>
详细信息>
更详细地说

因为我的页脚可以扩展以填充屏幕,所以我必须实现一个自定义解决方案:

  • 为了确保页脚不会开始隐藏,我将工具栏高度作为底部边距添加到细节片段的视图中
  • 为了防止页脚滚动,我在AppBarLayout上注册了一个OnOffsetChangedListener,并将偏移量更改传递给细节片段,细节片段又将其传递给其根视图,并对其调用requestLayout()
  • 在onMeasure()内部,根视图将偏移量添加到最初测量的高度
  • 在安卓4.3及以上版本上,这一点非常有效。页脚始终固定在屏幕的底部,并显示在屏幕上。展开时,视图也会通过根据应用程序栏偏移的大小进行缩放而固定到顶部。没问题

    但在Android 4.3之下,一段时间后requestLayout()根本没有任何效果!我也尝试了invalidate()和forceLayout()。既不调用onMeasure()也不调用onLayout(),并且该条会一直滚动,有时会在屏幕底部上方悬停,有时会在屏幕外部滚动。我完全不知道这是怎么可能的,但我观察到这取决于ViewPagers:当最多滑动其中任何一个页面两次时,页脚会以某种方式分离


    现在,我加入了一些if子句,以确保我的实现只针对4.3及以上版本。因此,在安卓4.0、4.1和4.2上,页脚会卷进和卷出。但这太糟糕了,所以请帮忙:我能做些什么使它适用于那些版本?或者,您是否有其他想法如何将页脚固定在底部并使其看起来更美观?

    我通过将页脚向上移动到协调器并使用。这样可以确保它始终位于正确的位置。

    我通过将页脚向上移动到协调器并使用。这将确保它始终位于正确的位置。

    您已获得“风滚草”徽章:'(您已获得“风滚草”徽章:'(
    <DrawerLayout>
      <CoordinatorLayout>
        <LinearLayout (horizontal)>
          <fragment in FrameLayout --> master/>
            <ViewPager (using FragmentStatePagerAdapter)>
              <PagerTabStrip/>
              <fragment pages, each being only a single RecyclerView/>
            </ViewPager>
          </fragment in FrameLayout>
          <fragment in FrameLayout --> detail>
            <RelativeLayout>
              <ViewPager (using FragmentStatePagerAdapter)/>
              <a custom footer view that can be expanded to fill the screen/>
            </RelativeLayout>
          </fragment in FrameLayout>
        </LinearLayout>
        <AppBarLayout>
          <Toolbar>
        </AppBarLayout>
      </CoordinatorLayout>
      <NavigationView/>
    </DrawerLayout>