2015-05-28 2 views
-1

У меня есть ViewPager, который содержит 3 фрагмента, проблема в том, что каждый фрагмент имеет разную высоту. В ViewPager я попытался использовать wrap_content для высоты, но он не работает.ViewPager и Fragment

Редактировать

Что мне нужно сделать, это иметь ViewPager, чтобы изменить размер, когда я переключить корыта фрагменты.

любая идея?

+1

будет ли вы вывести номер ур кода? – Android

+0

Я не тонкий код поможет, это простой ViewPager с некоторым фрагментом с разной высотой. – frenk91

+0

Попробуйте установить высоту в match_parent. –

ответ

1

Вам нужно установить высоту в представлении пейджера, а не в xml.

import android.content.Context; 
import android.support.v4.view.ViewPager; 
import android.util.AttributeSet; 
import android.view.View; 

public class CustomViewPager extends ViewPager { 

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

public CustomViewPager(Context context, AttributeSet attrs){ 

     super(context, attrs); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 

     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

     int height = 0; 
     for(int i = 0; i < getChildCount(); i++) { 

      View child = getChildAt(i); 

      child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 

      int h = child.getMeasuredHeight(); 

      if(h > height) height = h; 

     } 

     heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); 

     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
} 

Игра вокруг с помощью метода onMeasure получите, что вам нужно, то ViewPager контролирует высоту + ширина ее детей

Если это не работает, вы можете overide методы getPageHeight и GetPagewidth из Просмотр пейджера

@Override 
     public float getPageHeight(int position) { 
     //Return different height based on position. 
     // Height is returned as a float 
      if(position == 1) 
       { 
        return (0.35f); 
       } 
      else{ 
        retrun 0.50f; 
        } 
     } 
0

Говоря ViewPager по адресу wrap_content, его высота будет самой большой из фрагментов. Тогда, если у вас есть другие фрагменты, которые короче самого высокого фрагмента, они будут казаться короче внутри ViewPager. ViewPager удерживает все три фрагмента одновременно - он не удаляет фрагменты один влево и вправо, потому что они должны быть готовы к перемещению.

Следовательно, высота ViewPager всегда равна высоте самого высокого фрагмента. Вместо этого вы можете установить все высоты фрагментов на match_parent и ViewPager на размер его родителя (используя match_parent) или попытаться установить его на максимальную высоту фрагмента, используя wrap_content (хотя я не знаю, как это будет работать при использовании wrap_content и match_parent вместе)

Смежные вопросы