2013-03-01 5 views
8

Я новичок в разработке Android и у меня есть следующая проблема. Мне нужно использовать FrameLayout внутри ScrollView для его прокрутки. Я написал этоFrameLayout внутри ScrollView

<ScrollView 
    android:id="@+id/scrollView1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:background="#00ff00"> 

    <FrameLayout 
     android:id="@+id/frameLayout" 
     android:layout_width="match_parent" 
     android:layout_height="500dp" 
     android:background="#ff0000"> 
    </FrameLayout> 
    </ScrollView> 

Но это не работает. Я пробовал в RelativeLayout, и это сработало, но мне нужно использовать для FrameLayout. Любые идеи?

ответ

4

Я пробовал много вариантов для решения этой проблемы, включая ответы здесь, но никто не был полезен. ScrollView всегда оборачивает FrameLayout, но все нормально с RelativeLayout, LinearLayout ...

Я нашел одно решение для этого - установить минимальную высоту FrameLayout. Вы можете установить динамически минимальную высоту по методу setMinimumHeight().

2

Ваш образец xml неплох, единственное, что я вижу, - это если родитель ScrollLayout больше 500dp, он не будет прокручиваться.

Действительно, прокрутка используется, только если содержимое больше, чем прокрутка.

здесь, вы установите высоту контента 500dip и вы Scrollview к «match_parent» если родитель этого Scrollview взять весь экран, на экране высоты 800dip (например)

=> спиральный компрессор просто не нужно.

2

установка Try layout_height к "wrap_content" в вашем FrameLayout

<FrameLayout 
     android:id="@+id/frameLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#ff0000"> 

Это будет прокручиваться, когда FrameLayout будет выше, чем на границе экрана. Или, если вы хотите фиксированную высоту прокручиваемой области, установите высоту в 500dp на ScrollView. Это зависит от того, что вы хотите, но никогда не устанавливайте фиксированную высоту на дочернем элементе ScrollView. Высота ребенка ScrollView всегда должна быть wrap_content.

<ScrollView 
    android:id="@+id/scrollView1" 
    android:layout_width="match_parent" 
    android:layout_height="500dp" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:background="#00ff00"> 

    <FrameLayout 
     android:id="@+id/frameLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#ff0000"> 
    </FrameLayout> 
</ScrollView> 
1

Чтобы получить FrameLayout внутри ScrollView, сделайте следующее:

<ScrollView 
    android:id="@+id/scrollView1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/linearLayoutHeader1" 
    android:layout_centerHorizontal="true" > 

    <LinearLayout 
     android:id="@+id/LinearLayout1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 
     <FrameLayout 
      android:id="@+id/FrameLayout1" 
      android:layout_width="match_parent" 
      android:layout_height="1440dp" 
      > 
     </FrameLayout> 

    </LinearLayout> 
</ScrollView> 
13

андроида: fillViewport = "истинный" решает эту проблему.

android: fillViewport, Определяет, должно ли scrollview растягивать его содержимое, чтобы заполнить область просмотра.

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true"> 

    <FrameLayout 
     android:id="@+id/frameLayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
    </FrameLayout> 
    </ScrollView> 
Смежные вопросы