Android的 - 如何与不同高度多个孩子的ViewPager [英] Android - How to ViewPager with multiple childs with different heights

查看:140
本文介绍了Android的 - 如何与不同高度多个孩子的ViewPager的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个ViewPager并在其适配器我有3个孩子的(片段)。这些孩子的3应该对内容测量不同高度。

我已经尝试覆盖onMeasure了Methode在ViewPager像这样(SRC: stackoverflow.com/questions/8394681/android-i-am-unable-to-have-viewpager-wrap-content/18167273#18167273)

  @覆盖
保护无效onMeasure(INT widthMeasureSpec,诠释heightMeasureSpec){
    super.onMeasure(widthMeasureSpec,heightMeasureSpec);
    查看查看= NULL;    的for(int i = 0; I< getChildCount();我++){
        //找到第一个子视图
        鉴于= getChildAt(I)
        如果(查看!= NULL){
            //测量与指定的措施规范第一子视图
            view.measure(widthMeasureSpec,heightMeasureSpec);
        }         setMeasuredDimension(getMeasuredWidth(),
         measureHeight(heightMeasureSpec,视图));
    }}

但是,这并不对所有在ViewPager它只是将设置一个高度为所有孩子的工作。

这是从ViewPager扩展CustomViewPager:
    
                

这是viewPager适配器:

 公共类MyPagerAdapter扩展FragmentPagerAdapter {    私人最终的String [] = TITLES {卡1,卡2,Card3};    公共MyPagerAdapter(FragmentManager FM){
        超(FM);
    }    @覆盖
    公共CharSequence的getPageTitle(INT位置){
        返回TITLES [位置]
    }    @覆盖
    公众诠释的getCount(){
        返回TITLES.length;
    }    @覆盖
    公共片段的getItem(INT位置){
        开关(位置){
        情况下0:
            返回CookCardFragment.newInstance(位置);        情况1:
            返回RecipeCardFragment.newInstance(位置);        案例2:
            返回CookCardFragment.newInstance(位置);
        }
        返回null;
    }}


解决方案

  @覆盖
    公众持股量getPageWidth(INT位置){
    返回0.98f; //(0-1]此值指定页面会占用的空间在屏幕上
}

I have a ViewPager and in its adapter I have 3 childs(Fragments). These 3 childs should have different heights measured on content.

I have already tried to override the onMeasure Methode in ViewPager like this (src: stackoverflow.com/questions/8394681/android-i-am-unable-to-have-viewpager-wrap-content/18167273#18167273)

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    View view = null;

    for (int i = 0; i < getChildCount(); i++) {
        // find the first child view
        view = getChildAt(i);
        if (view != null) {
            // measure the first child view with the specified measure spec
            view.measure(widthMeasureSpec, heightMeasureSpec);
        }

         setMeasuredDimension(getMeasuredWidth(),
         measureHeight(heightMeasureSpec, view));
    }

}

But this don't work for all the childs in the ViewPager it only sets one height for all.

This is the CustomViewPager extended from ViewPager:

This is the adapter for viewPager:

public class MyPagerAdapter extends FragmentPagerAdapter {

    private final String[] TITLES = { "card1", "card2", "Card3" };

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return TITLES[position];
    }

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

    @Override
    public Fragment getItem(int position) {
        switch (position) {
        case 0:
            return CookCardFragment.newInstance(position);

        case 1:
            return RecipeCardFragment.newInstance(position);

        case 2:
            return CookCardFragment.newInstance(position);
        }
        return null;
    }

}

解决方案

@Override
    public float getPageWidth(int position) {
    return 0.98f; //(0-1] this values specifies how much space a page will occupy on screen
}

这篇关于Android的 - 如何与不同高度多个孩子的ViewPager的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆