no gravity for scrollview. how to make content inside scrollview as center

后端 未结 7 917
刺人心
刺人心 2020-12-07 09:35

I want the content inside the scrollView as center.



        
相关标签:
7条回答
  • 2020-12-07 10:00

    I think a more elegant solution would be to use the ScrollView's android:fillViewport property. A ScrollView is a little different in how it treats it's content view (can only have one), even if you set match_parent (fill_parent) to the ScrollView it won't give that much spacing to it's content view, instead the default behavior is for the ScrollView to wrap the content regardless of what you specify for that view. What android:fillViewport does is tell the ScrollViewto stretch its content to fill the viewport (http://developer.android.com/reference/android/widget/ScrollView.html#attr_android:fillViewport). So in this case, your LinearLayout would be stretched to match the viewport and if the height goes behind the viewport then it will be scrollable which is exactly what you want!

    The accepted answer won't work properly when the content extends beyond the ScrollView because it will still center the content view first causing it to cut off a portion of the view, and the ScrollView centered in another layout works but just doesn't feel right, besides I think it will also result in a lint error (useless parent or something along those lines).

    Try something like this:

    <ScrollView
        android:id="@+id/scroller"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:paddingTop="12dp"
        android:paddingBottom="20dp"
        android:scrollbarStyle="outsideOverlay"
        android:fillViewport="true">
    
        <LinearLayout
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="center">
    
            <Button
                android:id="@+id/button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="check" />
    
        </LinearLayout>
    
    </ScrollView>
    

    Just remember that the reason it is being centered here now is because of the android:gravity on the LinearLayout since the ScrollView will stretch the LinearLayout so keep that in mind depending on what you add to the layout.

    Another good read on ScrollView although not about centering but about fillViewport is http://www.curious-creature.org/2010/08/15/scrollviews-handy-trick/

    0 讨论(0)
  • 2020-12-07 10:01

    For @Patrick_Boss - what stopped the content from cutting of in my application was to change the gravity and layout_gravity to center_horizontal for the LinearLayout.

    It worked for me...but not sure if it will work for you.

    Modification of @Ghost's answer -

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/scrollView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:paddingTop="12dp"
        android:paddingBottom="20dp"
        android:scrollbarStyle="outsideOverlay" >
    
    
        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" 
            android:layout_gravity="center_horizontal"
            android:gravity="center_horizontal">
    
            <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="check" 
                android:gravity="center_vertical|center_horizontal"/>
        </LinearLayout>
    
    </ScrollView>
    
    0 讨论(0)
  • 2020-12-07 10:11

    using the scroll view inside the ConstraintLayout. It is worked for me

    <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@android:color/white">
    
                <ScrollView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent">
    
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical" />
                </ScrollView>
            </androidx.constraintlayout.widget.ConstraintLayout>
    

    Scroll view height should be wrap_content

    <ScrollView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
    
    0 讨论(0)
  • 2020-12-07 10:18

    I had the same issue and finally figured it out. This is for a vertical ScrollView.

    Put your ScrollView inside a RelativeLayout and center it in the RelativeLayout. In order for this to work, your ScrollView should have

    android:layout_height="wrap_content"
    

    This is how the final code should look like:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    
        <ScrollView
            android:id="@+id/scrollView1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
            android:layout_centerVertical="true" >
    
            <LinearLayout
                android:id="@+id/linearLayout1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
    
                <Button
                    android:id="@+id/button1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="b1"/>
                <Button
                    android:id="@+id/button2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="b2"/>
                <Button
                    android:id="@+id/button3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="b3"/>
            </LinearLayout>
    
        </ScrollView>
    
    </RelativeLayout>
    
    0 讨论(0)
  • 2020-12-07 10:18

    Use this attribute in ScrollView

    android:fillViewport="true"
    

    Example

     <?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"
    android:scrollbarStyle="outsideOverlay"
    android:fillViewport="true"
    >
       <RelativeLayout
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content">
    
             <!--Your Code goes here-->
    
       </RelativeLayout>
    
    </ScrollView>
    

    Make sure to use Single Child in ScrollView just like in above example which is Relativelayout.

    0 讨论(0)
  • 2020-12-07 10:20

    One thing to consider is what NOT to set. Make certain your child controls, especially EditText controls, do not have the RequestFocus property set.

    This may be one of the last interpreted properties on the layout and it will override gravity settings on its parents (layout or ScrollView).

    0 讨论(0)
提交回复
热议问题