Establecer la altura de Viewpager dentro de Scrollview en android
Tengo que mostrar un viewpager (una imagen y un texto debajo de la imagen en fila del paginador) dentro de un scrollview. Estoy descargando la imagen, el texto de la web y mostrando en las filas de buscapersonas. Envolví viewpager dentro de un srollview para apoyar el modo de paisaje también.
<com.xxx.myapp.android.ui.CustomScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:fadingEdge="none" android:fillViewport="true" android:gravity="center"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:descendantFocusability="blocksDescendants" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="800dp" android:layout_gravity="top" android:layout_marginTop="10dp" /> </LinearLayout> </com.xxx.myapp.android.ui.CustomScrollView>
Y aquí está CustomScrollView . El problema es ¿Cómo puedo configurar la altura del buscador de vista en función de su altura de niños para que pueda desplazar la pantalla hasta que el elemento de paginador de vista termine solo. Si establezco la altura del paginador de vista en wrapcontent, no se muestra nada en viewpager. Si fijo algunos 800dp entonces puedo ver los artículos del paginador pero hay el desplazamiento innecesario en la pantalla. No quiero que mi scrollview se despliegue más allá de la altura de los niños del buscapersonas. Por favor, ayúdame.
- FragmentStatePagerAdapter no quita fragmentos si se eliminó el fragmento padre
- ¿Cuándo debería getItemPosition considerar cambios en la posición de un ítem?
- SetCurrentItem en ViewPager no se desplaza inmediatamente en la posición correcta
- Despliegue de la disposición de la barra de herramientas con Viewpager dentro de NestedScrollView
- Aplicar fuerza cerrar en viewPager.setAdapter (adaptador)
- Horizontal y Vertical ViewPager juntos
- Widget de página de Viewpager más ancho de pantalla en Android
- Cómo encontrar la "última página" en un paginador de vista. O el número total de puntos de vista. Desarrollo de Android
- Reemplazar fragmento en ViewPager muestra pantalla en blanco?
- Android ViewPager muestra el teclado virtual en el lugar equivocado
- Destruye el elemento del adaptador de ViewPager después de cambiar la orientación de la pantalla
- Establecer páginas previas en ViewPager
- No hay actividad Excepción al usar viewpager y fragmentos dentro de fragmentos
Envuelva su fila de paginación dentro de CustomScrollView en lugar de envolver el paginador dentro de CustomScrollview. Y no fijar la altura de Viewpager como Piyush Gupath comentó. Utilice wrapcontent.
Para fijar la altura del viewpager podemos personalizar la clase viewpager.
public class WrapContentViewPager extends ViewPager { private int mCurrentPagePosition = 0; public WrapContentViewPager(Context context) { super(context); } public WrapContentViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { try { View child = getChildAt(mCurrentPagePosition); if (child != null) { child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); int h = child.getMeasuredHeight(); heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY); } } catch (Exception e) { e.printStackTrace(); } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } public void reMeasureCurrentPage(int position) { mCurrentPagePosition = position; requestLayout(); } }
Donde esta reMeasureCurrentPage debe llamarse en viewpager onPageSelected callback.and CustomScrollView es la vista principal.
mViewPager = new ViewPager(mContext) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); View view = getChildAt(this.getCurrentItem()); if (view != null) { view.measure(widthMeasureSpec, heightMeasureSpec); } setMeasuredDimension(getMeasuredWidth(), measureHeight(heightMeasureSpec, view)); } private int measureHeight(int measureSpec, View view) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.EXACTLY) { result = specSize; } else { // set the height from the base view if available if (view != null) { result = view.getMeasuredHeight(); } if (specMode == MeasureSpec.AT_MOST) { result = Math.min(result, specSize); } } return result; } };
Prueba de esta manera
<com.xxx.myapp.android.ui.CustomScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:fadingEdge="none" android:fillViewport="true" android:gravity="center"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="blocksDescendants" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="top" android:layout_marginTop="10dp" /> </LinearLayout> </com.xxx.myapp.android.ui.CustomScrollView>
- ¿Cómo agregar dos nuevas columnas a la base de datos SQLite de Android?
- CoordinatorLayout NullPointerException en onTouchEvent