【问题标题】:How to change height of ViewPager according to current tab?如何根据当前选项卡更改 ViewPager 的高度?
【发布时间】: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 中的标签时,页面无法始终更改为我想要选择的标签。此外,我还可以看到一些奇怪的行为,例如:

  1. 指示器滚动到正确位置,但我要选择的前一个选项卡和选项卡的 textColors 没有改变(我已通过 TabLayout 的 API 为已选择和未选择的选项卡设置了不同的颜色)
  2. 指示器滚动到正确位置,颜色也正确。 ViewPager的高度也改成了正确的数字,但是tab的内容是错误的(有时不改变,有时变成空白)。

我发现当我单击TabLayout 中的选项卡时,并不总是调用 onPageSelected()。但是如果我移动ViewPager的更改LayoutParams的代码,就可以正确调用了。

那么,有什么问题吗? 我怎样才能为不同的标签动态更改 ViewPager 的高度?提前感谢任何答案/cmets!

【问题讨论】:

  • 使用这个:github.com/rnevet/WCViewPager,它是一个处理 wrap_content 并动态改变高度的 ViewPager。
  • @Raanan 我以前试过,但在我的情况下不起作用。

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


【解决方案1】:

答案是:设置params.height后,我应该调用mViewPager.requestLayout()让更改立即生效。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2011-11-06
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多