如何根据当前标签更改ViewPager的高度?

时间:2015-08-24 11:30:39

标签: android android-viewpager android-support-library layoutparams

我创建了一个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 中的标签时,页面无法始终更改为我要选择的标签。此外,我可以看到一些奇怪的行为,如:

  1. 指示器滚动到正确的位置,但上一个标签和标签的textColors我想选择不要更改(我已经为TabLayout选择和未选择的标签设置了不同的颜色&# 39; s API)
  2. 指示器滚动到正确位置,颜色也正确。 ViewPager的高度也会更改为正确的数字,但标签的内容有误(有时它不会更改,有时会变为空白)。
  3. 我发现当我点击TabLayout中的标签时,总是调用onPageSelected()。但是,如果我移动更改LayoutParams ViewPager的代码,则可以正确调用它。

    那么,问题是什么? 如何针对不同的标签动态更改ViewPager的高度?提前感谢您的任何答案/评论!

1 个答案:

答案 0 :(得分:0)

答案是:设置<select data-ng-model="myval"> <option value="? number:2 ?"></option> <option value="2" class="ng-binding">Value 1</option> <option value="3" class="ng-binding">Value 2</option> </select> 后,我应该致电params.height立即进行更改。

在许多情况下,不需要mViewPager.requestLayout()View#requestLayout()。但这一次,其中一个应该出现。