0

我有4个不同的片段查看寻呼机。在这里,3个片段只包含webview。所有的片段加载不同的内容。我无法根据加载的内容设置高度。为此,我编写了一个自定义viewpager来测量viewpager的高度。对于第一个viewpager片段,高度计算正确。但是,当导航到第二个或第三个片段时,viewpager高度计算不准确。我不知道,我的代码中存在什么问题,以及需要更改哪些内容以便在导航到该视图页面页面之后计算每个片段的适当高度。这是我的查看寻呼机和寻呼机适配器代码。请帮助我。如何设置动态高度以查看android中的寻呼机子片段?

自定义视图寻呼机:

public class CustomViewPager extends ViewPager { 

public CustomViewPager (Context context) { 
    super(context); 
} 

public CustomViewPager (Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

    boolean wrapHeight = MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST; 

    final View tab = getChildAt(0); 
    int width = getMeasuredWidth(); 
    int tabHeight = tab.getMeasuredHeight(); 

    if (wrapHeight) { 
     // Keep the current measured width. 
     widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY); 
    } 

    int fragmentHeight = measureFragment(((Fragment) getAdapter().instantiateItem(this, getCurrentItem())).getView()); 
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(tabHeight + fragmentHeight + (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics()), MeasureSpec.AT_MOST); 

    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

@Override 
public void setOnPageChangeListener(OnPageChangeListener listener) { 
    requestLayout(); 
    invalidate(); 
    super.setOnPageChangeListener(listener); 
} 

@Override 
public void addOnPageChangeListener(OnPageChangeListener listener) { 
    super.addOnPageChangeListener(listener); 

} 

public int measureFragment(View view) { 
    if (view == null) 
     return 0; 

    view.measure(0, 0); 
    return view.getMeasuredHeight(); 
} 
} 

PagerAdapter:

public class MerchantsCataAdapter extends FragmentPagerAdapter { 
Context context; 
Merchant merchant; 
Fragment fragment; 

private int mCurrentPosition = -1; 

private String[] tabs = {"Home", "About Us","Promotions","Store Information"}; 

public MerchantsCataAdapter(FragmentManager fm, Context context,Merchant merchant) { 
    super(fm); 
    this.context = context; 
    this.merchant = merchant; 

} 

@Override 
public Fragment getItem(int index) { 

    switch (index) { 
     case 0: 
      fragment= new HomeContentFragment().newInstance(merchant.getCompany_home_content(),merchant.getVideo_url()); 
      break; 
     case 1: 
      fragment= new AboutusFragment().newInstance(merchant.getFull_description(),merchant.getVideo_url()); 
      break; 
     case 2: 
      fragment= new AboutusFragment().newInstance(merchant.getCompany_promotions(),merchant.getVideo_url()); 
      break; 
     case 3: 
      fragment= new FragmentStoreInformation().newInstance(merchant.getMerchantId(),merchant.getName()); 
      break; 

    } 
    return fragment; 
} 



@Override 
public int getCount() { 
    return tabs.length; 
} 

public String getTabView(int position) { 

    return tabs[position]; 
} 
+0

按照此[GIT中毂动态视图寻呼机链接](https://github.com/vabhishek/WrapContentViewPagerDemo/tree/master/DynamicViewPager-master),可能帮助你 –

+0

@NileshRathod,我想这一点,但它没有帮助。它不工作。 – Janaki

回答

0

最后,我找到了答案。将下面的属性放在Webview的xml中。这将根据内容自动采用webview高度。

android:scrollbarStyle="insideOverlay" 
相关问题