簡體   English   中英

如何根據當前選項卡更改ViewPager的高度?

[英]How to change height of ViewPager according to current tab?

我創建了一個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 LayoutParamsViewPager ,則可以正確調用它。

所以有什么問題? 以及如何動態更改不同選項卡的ViewPager的高度? 感謝您提前提出任何答案/評論!

答案是:設置params.height ,我應該調用mViewPager.requestLayout()以使更改立即生效。

在許多情況下,不需要View#requestLayout()View#setLayoutParams() 但是這次,其中一個應該出現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM