在我的Android应用程序中,使用一个包含
这将呈现出类似于下面的内容: 当我在布局中点击按钮时,我使用
起初我以为是
TabLayout
和ViewPager
的Toolbar
布局,并将它们组合在一个CoordinatorLayout
中。在ViewPager
的第一页中,使用一个RecyclerView
来展示CardView
项。我的问题是,ViewPager
会被调整大小,导致CardView
列表项被裁剪。主要布局基本上如下所示:<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent" >
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.design.widget.CoordinatorLayout>
我的ViewPager
提供的第一个片段如下:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v7.widget.RecyclerView
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"/>
</FrameLayout>
这将呈现出类似于下面的内容: 当我在布局中点击按钮时,我使用
startActivityForResult
来调用另一个活动,在返回我的活动时,有时候我的列表突然被裁剪,只有第一项的一半可见:
在ViewPager
中水平滑动到另一个页面,然后返回,问题就消失了,因此似乎没有正确触发重新布局。但是按下HOME键然后恢复我的活动并不能解决问题。请注意,即使我没有以任何方式修改布局,只是从startActivityForResult调用中返回,也会发生这种情况。是的,它只会有时发生...而且我没有运行可以解释明显随机行为的后台线程。起初我以为是
RecyclerView
缩小了,但使用HierarchyViewer我能够发现实际上是整个ViewPager
缩小到了原来的一半高度。
我尝试了各种方法来解决这个问题,包括在整个视图层次结构上调用invalidate()
和requestLayout()
,但似乎没有什么帮助(尽管滑动到另一页然后再返回可以解决它)。此外,这些都不是我想采取的解决方案... 然后我尝试将我的ViewPager高度更改为wrap_content
,这确实解决了这个特定的问题;在返回到我的活动后,我的RecyclerView
中的第一个项目永远不会被裁剪,并且我可以向下滚动到其他项目。然而,现在我的列表中最后一个项目总是被裁剪,如下面的截图所示,其中列表已经滚动到底部:
match_parent
可以工作,因为布局行为将在布局子项被布局时将其放置在AppBarLayout
下方。 - Nikola Despotoskimatch_parent
时,我遇到了一个奇怪的问题,即从子活动返回后,viewpager的大小会发生变化,这是主要问题。 - JHHlayout:height
保持为0dp
,并添加layout:weight
为1
。 - JavaGhostlayout_weight
属性适用于 LinearLayout,而不是 CoordinatorLayout,后者是扩展自 FrameLayout 的。这并不能起到帮助作用。 - JHH