简体   繁体   中英

ScrollView inside FrameLayout layout margin's issue

I have a very weird issue with a FrameLayout holding a ScrollView . My layout looks like the following:

<FrameLayout
   android:layout_width="match_parent"
   android:layout_height="match_parent">
   <ScrollView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical"
      android:layout_marginTop="50dp">
      <LinearLayout
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:orientation="vertical">
     </LinearLayout>
   </ScrollView>

   <...
   />
</FrameLayout>

The issue that I have is with the: layout_marginTop attribute on the ScrollView tag. It doesn't apply the same way accross different devices. For instance, on a Nexus S (running ICS) it is interpreted correctly by adding some space at the of the screen, but on another (Galaxy S2 running Gingerbread) it creates space at the bottom of the screen rather than the top of screen.

Any idea?

Thanks!

[EDIT]

  • It seems that the problem is common to all devices running an Android version lower than 3.0.

  • Thanks for noticing those non-sense extra attributes, it appears they were here because that FrameLayout used to be wrapped inside LinearLayout before.

No use android:layout_gravity="center_vertical" with android:layout_width="match_parent" . This is no sense.

Try to use android:paddingTop="50dp" in FrameLayout instead of android:layout_marginTop="50dp" in ScrollView

<FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:paddingTop="50dp">
    <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            >
        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical"
                >
        </LinearLayout>
    </ScrollView>

尝试android:fillViewPort=true

Fixed it by using android:paddingTop on the ScrollView instead of android:layout_marginTop .

<FrameLayout
   android:layout_width="match_parent"
   android:layout_height="match_parent">
   <ScrollView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical"
      android:layout_paddingTop="50dp">
      <LinearLayout
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:orientation="vertical">
     </LinearLayout>
   </ScrollView>

   <...
   />
</FrameLayout>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM