Android - Ändern Sie die Höhe der ViewPager in runtime
Will ich ändern, die Höhe eines ViewPager, weil es enthält einige Kinder mit unterschiedlicher Höhe. Ich habe gelesen, dass wrap_content ist nicht möglich, ViewPager, so will ich ändern, die Höhe, die es in der Laufzeit.
Ich habe dies ausprobiert, aber es funktioniert nicht:
pager.getLayoutParams().height=1000;
Könnte jemand bieten bitte helfen?
CustomViewPager.class
public class CustomViewPager extends ViewPager {
/**
* Constructor
*
* @param context
* the context
*/
public CustomViewPager(Context context) {
super(context);
}
/**
* Constructor
*
* @param context
* the context
* @param attrs
* the attribute set
*/
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);
}
}
xml-Datei:
<com.arsoft.ex.viewpager.CustomViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</com.arsoft.ex.viewpager.CustomViewPager>
MainClass:
tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
pager = (CustomViewPager) findViewById(R.id.viewPager);
adapter = new MyPagerAdapter(getSupportFragmentManager());
pager.setAdapter(adapter);
final int pageMargin = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 4, getResources()
.getDisplayMetrics());
pager.setPageMargin(pageMargin);
tabs.setViewPager(pager);
FragmentPagerAdapter:
public class MyPagerAdapter extends FragmentPagerAdapter {
private final String[] TITLES = { "Cook", "Recipe", "Comments" };
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: **pager.getLayoutParams().height=100;**
return CookCardFragment.newInstance(position, pager);
case 1: **pager.getLayoutParams().height=400;**
return RecipeCardFragment.newInstance(position, pager);
case 2: **pager.getLayoutParams().height=1000;**
return CookCardFragment.newInstance(position, pager);
}
return null;
}
}
- poste die gesamte Klasse
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gesehen, dieses problem vor.
Vielleicht könnten Sie die fumction wie diese:
Überprüfen Sie meine Antwort, ich war in der Lage, ändern Sie die Höhe der ViewPager, wenn Sie die Seite ändern oder ändern Sie die Höhe der es Kind
https://stackoverflow.com/a/25710358/1835245