Ich habe this und that Antworten verfolgt, ich fand auch this Link.Viewpager mit dynamischer Höhe funktioniert nicht (verwenden Sie immer die Höhe des ersten Fragments)
Ich verwende diese Ressourcen, um & Fehler zu testen. Jetzt meine ViewPager
erfolgreich messen ihren Inhalt, , aber nur die erste angezeigt. FYI, meine ViewPager
hält einige komplexe Ansichten, wie ExpendableListView
- das ist, warum keiner der Code in diesen Ressourcen perfekt funktioniert, muss ich den Code selbst ändern.
Ich habe 4 Fragmente (Inhalt), so dass ich verwenden pager.setOffscreenPageLimit(3);
Das ist mein Brauch ist ViewPager
:
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);
}
public int measureFragment(View view) {
if (view == null)
return 0;
view.measure(0, 0);
return view.getMeasuredHeight();
}
}
Das ist mein CustomPagerTabStrip
:
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
android.view.ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
Und das ist mein XML :
<RelativeLayout
android:id="@+id/relativePager"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<com.xxx.yyy.util.CustomViewPager
android:id="@+id/detailPager"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<com.xxx.yyy.util.CustomPagerTabStrip
android:id="@+id/detailTab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#161C28"
android:textColor="#FFFFFF" />
</com.xxx.yyy.util.CustomViewPager>
</RelativeLayout>
Beispielfall:
Wenn die Höhe des ersten Fragments 100 Pixel ist, dann werden alle anderen Fragmente werden auf 100 Pixel bleiben. Wenn also die Höhe des zweiten Fragments 130px beträgt, wird es auf 100px geschnitten.
Als ich versuchte, zu debuggen, die onMeasure
auf meinem CustomViewPager
immer 4 Mal aufgerufen, wenn der Activity
erstellt wird, aber alle von ihnen nur das erste Fragment lesen. Die onMeasure
nie wieder danach aufgerufen werden, auch wenn ich (von links nach rechts wechseln) von einem Fragment zum anderen.
Bitte helfen Sie mir, ich habe viele Stunden ausgegeben, um dieses Ding zum Laufen zu bringen. Fragen Sie mich einfach, wenn Sie weitere Informationen benötigen, Danke für Ihre Zeit.
Irgendwelche Hilfe bitte? –
Hallo Ich möchte wissen, wie Sie das Problem lösen .. –
@RenjithKN Leider konnte ich dieses Problem nicht lösen, also verwende ich andere Ansatz (nicht mit einigen komplexen Ansicht in der Ansicht Pager) :( –