0

В моем приложении для Android я хочу реализовать PagerSlidingTab and ViewPager внутри ScrollView. Файл макета показан ниже. Я столкнулся с этой странной проблемой. Он показывает только верхнюю полосу вкладок, и содержимое не отображается для ViewPager. Содержание фрагмента на экране. Я не знаю, какова проблема с этим. Если я удалю ScreollView из layotu, тогда он работает отлично, но я хочу все внутри ScrollView. Пожалуйста, помогите мне решить эту проблему.Android: ScrollView + ViewPager не работает должным образом

Планировка:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <RelativeLayout 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <com.danzim.diamond.classes.KenBurnsView 
      android:id="@+id/newsHeaderKenburn" 
      android:layout_width="match_parent" 
      android:layout_height="180dp" 
      android:layout_alignParentTop="true" 
      android:background="@color/black" /> 

     <com.astuetz.PagerSlidingTabStrip 
      android:id="@+id/newsTabs" 
      android:layout_width="match_parent" 
      android:layout_height="48dp" 
      android:layout_below="@+id/newsHeaderKenburn" 
      android:background="@drawable/background_news_tab" 
      app:pstsDividerColor="@color/transparent" 
      app:pstsIndicatorColor="@android:color/white" 
      app:pstsTextAllCaps="true" /> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/newsPager" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/newsTabs" /> 
    </RelativeLayout> 

</ScrollView> 
+0

Вы пробовали, чтобы размер RelativeLayout обертывал содержимое вместо соответствия родительскому? – Hacketo

+0

@Hacketo да, я пробовал это.и не работает – zanky

ответ

4

Был небольшая ошибка в моем коде. Я изменил код ScrollView и его работоспособность.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true"> 

Просто нужно добавить android:fillViewport="true" к ScrollView элементу. Я получил ответ по этой ссылке: Is it possible to have a ViewPager inside of a ScrollView?

2

Простым решением было бы добавить android: fillViewport = "true" в ваш вид прокрутки, но есть более глубокая проблема в использовании этого макета для рассмотрения.

Проблема, с которой вы сталкиваетесь, заключается в том, что ScrollView обертывает ее содержимое и берет «собственность» на изменение размеров элементов внутри него. Таким образом, он изменяет размер Relative layout только в заголовках PagerSlidingTabStrip, потому что это вся информация, которую он имеет, когда он делает макет экрана. Содержимое ViewPager еще не добавлено, поэтому оно не учитывается при изменении относительной компоновки.

Предлагаемое решение состоит в том, чтобы иметь прокрутку в каждом элементе, который будет находиться внутри элемента управления ViewPager. Итак, вы собираетесь добавлять фрагменты к ViewPage, я предполагаю? просто убедитесь, что ScrollView является элементом управления topMost в каждом из этих макетов. Это приводит к менее неожиданному поведению позже, когда вы хотите добавить, например, listview внутри ViewPager, ListViews и ScrollViews не похожи друг на друга, и у вас может быть только один или другой, у вас нет ничего другого, который прокручивается внутри ScrollView.

Надеюсь, это помогло вам хотя бы. Пожалуйста, звоните мне, если вам нужна дополнительная информация об этом.

+0

yaa, я получил это решение, но мне нужно поставить viewpager внутри 'ScrollView', так как я хочу, чтобы функция прокрутки всей страницы, эта страница может иметь что-то вроде« ViewPager »и другие элементы управления. Поэтому я использую ScrollView вне ViewPager. Спасибо за ваш повтор. – zanky

+0

ok cool просто подумал, что я бы указал, что вы не сможете использовать списки других вещей, которые используют функцию прокрутки внутри фрагментов, которые позже будут использоваться в представлении пейджера :). Функция fillViewport = true будет, по крайней мере, удостовериться, что scrollview заполнит все свободное пространство на экране вместо того, чтобы просто изменить размер содержимого. –

+0

Таким образом, нет возможности прокручивать весь вид, если у вас есть viewpager with wrap_content в scrollview? – AdrianoCelentano

Смежные вопросы