¿Es posible tener un ViewPager dentro de un ScrollView?
Estoy intentando utilizar un ViewPager
dentro de un ScrollView
, pero el ViewPager
no aparece. Si ViewPager
el ScrollView
el ViewPager
aparece bien.
He creado un proyecto de prueba simple con lo siguiente:
- ScrollView desplazamientos automáticos para seleccionar TextView
- Implementar zoom en scrollView android
- Mi listview no rellena el padre
- Android: arrastrar en MPAndroidChart no responde cuando está contenido en ScrollView
- Cómo desplazar el edittext dentro de la vista de desplazamiento
Layout main.xml:
<?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>
Clase de actividad:
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) { } }
Gracias por tu tiempo.
- Cambiar el color de la barra de desplazamiento en Android
- ¿Cómo deshabilitar un scrollView?
- Cuadrícula de imágenes dentro de ScrollView
- Cómo establecer la pestaña seleccionada debe estar en el centro
- La vista de desplazamiento de Android dentro de otra vista de desplazamiento no se desplaza
- Instagram como desplazamiento en la galería personalizada
- Tema scrollView y pie de página en android
- Scrollview no se desplaza hacia abajo completamente
Lo he descubierto;
Necesitaba agregar android:fillViewport="true"
al elemento ScrollView.
Sí, es posible tener viewpager dentro de scrollview.
Utilice debajo del código y usted alcanzará su meta, he hecho iguales en mi código también.
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; }
Espero que esto ayude a alguien a resolver problemas de desplazamiento con ViewPager anidado dentro de ScrollView.
Este trabajo de soloution para mí, con dinamically contenido
http://www.henning.ms/2013/09/09/viewpager-that-simply-dont-measure-up/
En el xml scrollview
poner android:fullViewPorts=true
y android:layout_height=wrap_content
En el viewpager personalizado, también android:layout_height=wrap_content
¿Por qué estás tratando de hacer esto? La forma más natural sería envolver cada página en un ScrollView
si es necesario.
- La barra de estado se vuelve blanca y no muestra contenido detrás de ella
- Firebase onTokenRefresh () no se llama