【发布时间】:2015-08-27 12:15:16
【问题描述】:
我创建了一个DialogFragment,里面有一个ViewPager,它有3个标签。我想根据当前选项卡更改ViewPager 的高度。这是我的代码:
mViewPager.setAdapter(mAdapter);
mTabLayout.setupWithViewPager(mViewPager); //TabLayout of Android Support Design Library
mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
ViewGroup.LayoutParams params = mViewPager.getLayoutParams();
params.height = mTabHeights.get(position);
}
});
这并不总是有用的。当我滚动ViewPager 时,它可以根据当前选项卡动态更改高度,一切正常。但是,当我单击TabLayout 中的标签时,页面无法始终更改为我想要选择的标签。此外,我还可以看到一些奇怪的行为,例如:
- 指示器滚动到正确位置,但我要选择的前一个选项卡和选项卡的 textColors 没有改变(我已通过
TabLayout的 API 为已选择和未选择的选项卡设置了不同的颜色) - 指示器滚动到正确位置,颜色也正确。
ViewPager的高度也改成了正确的数字,但是tab的内容是错误的(有时不改变,有时变成空白)。
我发现当我单击TabLayout 中的选项卡时,并不总是调用 onPageSelected()。但是如果我移动ViewPager的更改LayoutParams的代码,就可以正确调用了。
那么,有什么问题吗? 我怎样才能为不同的标签动态更改 ViewPager 的高度?提前感谢任何答案/cmets!
【问题讨论】:
-
使用这个:github.com/rnevet/WCViewPager,它是一个处理 wrap_content 并动态改变高度的 ViewPager。
-
@Raanan 我以前试过,但在我的情况下不起作用。
标签: android android-viewpager android-support-library layoutparams