Ist es möglich, einen ViewPager innerhalb eines ScrollView zu haben?

Ich versuche, einen ViewPager innerhalb eines ScrollView , aber der ViewPager wird nicht ViewPager . Wenn ich den ScrollView ViewPager erscheint der ViewPager gut.

Ich habe ein einfaches Testprojekt mit folgendem erstellt:

  • Wie verhalten Android-Mediaplayer weiterhin Songs, wenn App geschlossen ist?
  • Realm: Verwenden Sie ein oder mehrere Realms in einer App (und ein oder mehrere Schemata)
  • Android: Ellipsen Ende - Extra Charaktere nach Ellipse
  • Keine Aktivität gefunden, um Intent zu behandeln: android.intent.action.VIEW
  • Wie man ein anderes Fragment auf recyclerview OnClick öffnet
  • CalendarView Android-Hilfe
  • Main.xml layout:

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> <android.support.v4.view.ViewPager android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/viewpager" /> </ScrollView> </LinearLayout> 

    Aktivitätsklasse:

     public class ScrollViewWithViewPagerActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ViewPager vp = (ViewPager) findViewById(R.id.viewpager); vp.setAdapter(new MyPagerAdapter(this)); } } class MyPagerAdapter extends PagerAdapter { private Context ctx; public MyPagerAdapter(Context context) { ctx = context; } @Override public int getCount() { return 2; } @Override public Object instantiateItem(View collection, int position) { TextView tv = new TextView(ctx); tv.setTextSize(50); tv.setTextColor(Color.WHITE); tv.setText("SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, " + "SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, " + "SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, SMILE DUDE, " + "SMILE DUDE, SMILE DUDE, SMILE DUDE"); ((ViewPager) collection).addView(tv); return tv; } @Override public void destroyItem(View collection, int position, Object view) { ((ViewPager) collection).removeView((View) view); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Parcelable saveState() { return null; } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { } @Override public void startUpdate(View arg0) { } @Override public void finishUpdate(View arg0) { } } 

    Dank für Ihre Zeit.

  • Wie kann man herausfinden, welche innere anonyme Klasse durch einen Klassennamen angegeben ist?
  • Android-Kamera: Threads? Was sollte was tun?
  • Wann ist eine "Consumer Side" von TextureView geschlossen?
  • Wenn AsyncTask keine innere Klasse ist ... - einige Fragen
  • Unterschied zwischen SurfaceView und View?
  • So fügen Sie mehr Frame wie Nexus 6P, 5X etc in Screenshots in Android Studio
  • 4 Solutions collect form web for “Ist es möglich, einen ViewPager innerhalb eines ScrollView zu haben?”

    Ich habe es herausgefunden;

    Ich musste android:fillViewport="true" hinzufügen android:fillViewport="true" zum ScrollView-Element.

    Ja, es ist möglich, Viewpager in scrollview zu haben.

    Verwenden Sie unten Code und Sie werden Ihr Ziel zu erreichen, ich habe das gleiche in meinem Code als gut getan.

      public class WrapContentHeightViewPager extends ViewPager { public WrapContentHeightViewPager(Context context) { super(context); } public WrapContentHeightViewPager(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, View.MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); int h = child.getMeasuredHeight(); if (h > height) height = h; } heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } @Override public boolean onTouch(View v, MotionEvent event) { int dragthreshold = 30; int downX = 0; int downY = 0; switch (event.getAction()) { case MotionEvent.ACTION_DOWN: downX = (int) event.getRawX(); downY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: int distanceX = Math.abs((int) event.getRawX() - downX); int distanceY = Math.abs((int) event.getRawY() - downY); if (distanceY > distanceX && distanceY > dragthreshold) { mViewPager.getParent().requestDisallowInterceptTouchEvent(false); mScrollView.getParent().requestDisallowInterceptTouchEvent(true); } else if (distanceX > distanceY && distanceX > dragthreshold) { mViewPager.getParent().requestDisallowInterceptTouchEvent(true); mScrollView.getParent().requestDisallowInterceptTouchEvent(false); } break; case MotionEvent.ACTION_UP: mScrollView.getParent().requestDisallowInterceptTouchEvent(false); mViewPager.getParent().requestDisallowInterceptTouchEvent(false); break; } return false; } 

    Hoffe, dass dies hilft bei der Lösung von Scroll-Probleme mit verschachtelten ViewPager in einem ScrollView.

    Diese soloution Arbeit für mich, mit dinamischen Inhalt

    http://www.henning.ms/2013/09/09/viewpager-that-simply-dont-measure-up/

    In der xml scrollview setzen android:fullViewPorts=true und android:layout_height=wrap_content

    Im benutzerlichen viewpager auch zu android:layout_height=wrap_content

    Warum versuchst du das zu tun? Die natürlichere Art wäre, jede Seite in einem ScrollView zu wickeln, wenn Sie müssen.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.