Ich habe hier gesucht, aber meine Lösung nicht gefunden. Ich poste also mein Problem, es funktioniert gut, wenn wir auf Tabs tippen, aber es funktioniert nicht perfekt, wenn wir ViewPager scrollen. Es gibt ein Problem mit der dynamischen Höhe. Einige Inhalte werden nicht angezeigt.Tabs mit dynamischer Höhe in Fragment
meine Xml ist
<my_packagename.ViewPager_Height
android:id="@+id/pager"
android:layout_width="match_parent"
android:nestedScrollingEnabled="false"
android:layout_height="wrap_content" />
und jetzt meine Java-Datei ist wie
public class ViewPager_Height extends ViewPager {
private View mCurrentView;
public ViewPager_Height(Context context) {
super(context);
}
public ViewPager_Height(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (mCurrentView == null) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
return;
}
int height = 0;
mCurrentView.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = mCurrentView.getMeasuredHeight();
if (h > height) height = h;
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
public void measureCurrentView(View currentView) {
mCurrentView = currentView;
requestLayout();
}
public int measureFragment(View view) {
if (view == null)
return 0;
view.measure(0, 0);
return view.getMeasuredHeight();
}
}
und Hauptklasse ist
final ViewPager_Height viewPager = (ViewPager_Height) findViewById(R.id.pager);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText(about_us));
tabLayout.addTab(tabLayout.newTab().setText(listing));
tabLayout.addTab(tabLayout.newTab().setText(contact));
DynamicheightTabsAdapter adapter;
adapter = new DynamicheightTabsAdapter(getSupportFragmentManager(), "TASK");
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
}
und schließlich meine Adapter Klasse wie
public class DynamicheightTabsAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
private int mCurrentPosition = -1;
public DynamicheightTabsAdapter(FragmentManager fm, String takidetifier) {
super(fm);
this.fragments = new ArrayList<>();
switch (takidetifier){
case "Task":
fragments.add(new MyFirstFragment());
fragments.add(new MySecondFragment());
fragments.add(new MyThirdFragment());
break;
}
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
super.setPrimaryItem(container, position, object);
if (position != mCurrentPosition) {
Fragment fragment = (Fragment) object;
ViewPager_Height pager = (ViewPager_Height) container;
if (fragment != null && fragment.getView() != null) {
mCurrentPosition = position;
pager.measureCurrentView(fragment.getView());
}
}
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
}
Use 'android: weightSum' für die lineare Layout und ‚android: layout_weight 'andere Elemente im linearen Layout. Beispiel: Sie müssen weightSum als 100 festlegen und die Summe der layout_weight aller untergeordneten Elemente sollte 100 sein. –